Zeev, On Tue, Mar 3, 2015 at 8:05 AM, Zeev Suraski <z...@zend.com> wrote: >> So I do apologize to the person. I don't to the code. > > I wanted to verify whether my gut was correct (minimal amount of output, and > stdout is in fact buffered - output shouldn't move the needle) and asked > Dmitry to rerun the C test on the same system, but this time with the output > code completely commented out: > real 0m0.011s (+- 0.01) > user 0m0.011s (+- 0.01) > sys 0m0.001s > > Apologies to the code might be in order :) > > The source of the JIT engine's edge is, as Dmitry and Andi said, the > CPU-specific optimizations that gcc -O2 doesn't generate, and therefore it > can actually be faster than a generic native executable in some (I would > guess not all that common) cases.
So, let's put that to the test, shall we. I compiled and ran the "JIT" compiler (can we please stop calling it that, it's not). along side PHP 5.5, PHP 7 and GCC -O0 through -O3. I also turned on the ob_start and off (commenting out the ob_start and ob_end_flush lines): https://docs.google.com/spreadsheets/d/1b4yFh0i62haDoQBRf8pOoi63OLrxRbecHSj9sQpD5Nk/edit?usp=sharing With ob_start, the "JIT" was fastest. Without it, it was more than 2x slower (slightly faster than -O0). Raw results (average): GCC -O0: 0.0258 GCC -O1: 0.0160 GCC -O2: 0.0144 GCC -O3: 0.0140 "JIT" /w ob_start: 0.011 "JIT" /wo ob_start: 0.0238 5.5 /w: 1.273 5.5 /wo: 1.301 7 /w: 1.492 7 /wo: 1.545 I used identical code to what Dmitry posted earlier, with the one exception that ob_start was commented out for the "/wo" runs. Now, there's something really interesting in those results. The numbers given back from the "JIT" are far more stable than anything else (more than an order of magnitude more stable /wo, and several orders /w ob_start). Something smells off about it. I'm not so sure what off hand, but I'm going to dig further. Now, to the point that "gcc uses output buffering". Yes, it does. However, PHP (including the "JIT") is compiled with GCC. So it will use a similar output buffer unless you disable the buffer. The only place in 7 that we do that is sapi/phpdbg/phpdbg.c:881. So either way, you're going to be using the same output buffer on the STDOUT stream. Anthony -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php