PHP 8: A Quick Look at JIT
Following on from a PHP 8/JIT benchmark on twitter, I decided to have a look myself.
I've picked an example that I know speeds up really well when reimplementing it in C. I wrote about this RDP algorithm some time ago.
What it does is to take a line of geospatial points (lon/lat coordinates), and simplifies it. It's my go-to example to show raw algorithmic performance, which is probably the best place to use a JIT for non-trivial code. I actually use this in production.
With PHP 7.4:
$ pe 7.4dev; time php -n \
-dzend_extension=opcache -dopcache.enable=1 -dopcache.enable_cli=1 \
-dopcache.jit=1235 -dopcache.jit_buffer_size=64M \
bench-rdp.php 1000
Using array (
0 => 'RDP',
1 => 'simplify',
)
real 0m8.778s
user 0m8.630s
sys 0m0.117s
(I realise that the opcache arguments do nothing on the command line here). This runs RDP::simplify (my PHP implementation) 1000 times in about 8 seconds.
With PHP 8.0 and JIT:
$ pe trunk; time php -n \
-dzend_extension=opcache -dopcache.enable=1 -dopcache.enable_cli=1 \
-dopcache.jit=1235 -dopcache.jit_buffer_size=64M \
bench-rdp.php 1000
Using array (
0 => 'RDP',
1 => 'simplify',
)
real 0m4.640s
user 0m4.627s
sys 0m0.008s
It jumps from ~8.8s to ~4.6s, a reduction in time of ~4.2s (or 48%), which is pretty good.
Now if I run the same with the geospatial extension which has a C implementation.
With PHP 7.4 and the extension:
$ pe 7.4dev; time php -n -dextension=geospatial \
-dzend_extension=opcache -dopcache.enable=1 -dopcache.enable_cli=1 \
-dopcache.jit=1235 -dopcache.jit_buffer_size=64M bench-rdp.php 1000
Using 'rdp_simplify'
real 0m0.695s
user 0m0.675s
sys 0m0.021s
Which gives a reduction in speed compared to PHP 7.4 of ~8.1s (or 92%).
So it looks like the JIT does do some good work for something that's highly optimisable, but still nowhere near what an implementation in C could do.
The code that I used is in this Gist.
This ran on a 4th gen ThinkPad X1 Carbon, making sure my CPU was pinned at its maximum speed of 3.3Ghz. Although I've pasted only one result for each, I did run them several times with very close outcomes.
Life Line
Dartford Warbler Posing
In nearly the same spot as the Stonechat from the previous post, this tiny Dartford Warbler sat still here for a few moments.
#photography #Birds #BirdPhotography #BirdsOfFediverse #NaturePhotography #wildlife #Norfolk
Specify whether pedestrian crossings have traffic signals
Specify whether traffic signals have a button for pedestrians
Specify whether traffic signals have sound signals
Specify whether traffic signals have tactile indications that it's safe to cross
Specify maximum heights
Specify whether pedestrian crossings have markings
Survey postbox collection times
Specify type of entrances
Specify whether roads have sidewalks
Specify motorcycle parking fees
Specify access to playgrounds
Survey opening hours
Specify street/place names to addresses
Specify whether crosswalks have tactile paving
Specify whether pedestrian crossings have islands
Determine the heights of kerbs at crossings
Specify bollard types
Survey if places still exist
Survey tactile paving on steps
Specify whether steps have a ramp
Updated a post_box
Created a post_box; Updated a post_box
This morning's list of account requests for our Mastodon instance is even weirder than normal.
AI, wasting more time yet again. Sigh.
Young European Stonechat perched upon a branch.
We were looking out for Dartford Warblers, but then this cheeky bird popped up. A little far away, but it sat still nicely.
#photography #Birds #BirdPhotography #BirdsOfFediverse #NaturePhotography #wildlife #Norfolk




Shortlink
This article has a short URL available: https://drck.me/jit1-fmy