3v4l.org

run code in 300+ PHP versions simultaneously
<?php // Proposal idea of enabling the unrolling in the userland. function measure(string $label, callable $fn): void { $start = hrtime(true); $result = $fn(); $end = hrtime(true); $elapsed = ($end - $start) / 1e9; echo "Sum: {$result}, {$label}: " . number_format($elapsed, 6) . " seconds\n"; } $array = range(1, 1e6); $n = count($array); measure("Normal for loop", function () use ($array, $n) { $sum = 0; for ($i = 0; $i < $n; $i++) { $sum += $array[$i]; } return $sum; }); // Sum: 500000500000, Normal for loop: 0.047172 seconds measure("Manual Unrolled x4", function () use ($array, $n) { $sum = 0; for ($i = 0; $i < $n; $i += 4) { $sum += $array[$i] + $array[$i + 1] + $array[$i + 2] + $array[$i + 3]; } return $sum; }); // Sum: 500000500000, Manual Unrolled x4: 0.042200 seconds measure("Manual Unrolled x8", function () use ($array, $n) { $sum = 0; for ($i = 0; $i < $n; $i += 8) { $sum += $array[$i] + $array[$i + 1] + $array[$i + 2] + $array[$i + 3] + $array[$i + 4] + $array[$i + 5] + $array[$i + 6] + $array[$i + 7]; } return $sum; }); // Sum: 500000500000, Manual Unrolled x8: 0.036472 seconds // Attributed Unroll - this is handled by your modified compiler measure("Attributed Unrolled #[Unroll(4)]", function () use ($array, $n) { $sum = 0; // @TODO: KhaledAlam: Unrolling logic of zend_compile_for( ) // #[Unroll(4)] for ($i = 0; $i < $n; $i++) { $sum += $array[$i]; } return $sum; }); // Sum: 0, Attributed Unrolled #[Unroll(4)]: 0.000002 seconds
Output for git.master_jit
Sum: 500000500000, Normal for loop: 0.008335 seconds Sum: 500000500000, Manual Unrolled x4: 0.005305 seconds Sum: 500000500000, Manual Unrolled x8: 0.004796 seconds Sum: 500000500000, Attributed Unrolled #[Unroll(4)]: 0.006195 seconds
Output for git.master
Sum: 500000500000, Normal for loop: 0.006009 seconds Sum: 500000500000, Manual Unrolled x4: 0.005082 seconds Sum: 500000500000, Manual Unrolled x8: 0.004807 seconds Sum: 500000500000, Attributed Unrolled #[Unroll(4)]: 0.006100 seconds

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
26.49 ms | 407 KiB | 5 Q