Hi Sara,

> -----Original Message-----
> From: Sara Golemon [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, January 17, 2007 11:36 PM
> To: Dmitry Stogov
> Cc: internals@lists.php.net; Andrei Zmievski; Andi Gutmans
> Subject: Re: [PHP-DEV] Giving Globals the CV treatment [WAS: 
> Runtime JIT Proposals]
> 
> 
> > It is interesting and very clear patch.
> > Probably you idea can be extended to support regular globals too. I 
> > mean $GLOBALS["name"].
>  >
> GLOBALS is itself in the auto global registry, so these would 
> automatically get picked up too.   Oh, no, you probably mean 
> have that 
> entire expression boil down to a CV, ah... that'll be 
> slightly tricker 
> (since it'll involve rewriting the opcode), but in principle it 
> shouldn't be impossible.  Even if it's ugly to do in the single-pass 
> compiler, an opcode optimizer could certainly handle it in its second 
> pass once the fetch_type is added to CV definitions...
> 
> > BTW I am not sure this patch will give significant speedup, because 
> > locals are used most often then globals, and your patch adds small 
> > overhead for them. Did you benchmarked your patch?
> > 
> Well, I gave it the usual BogoMIPS treatment (Bogus Meaningless 
> Indication of Processor Speed for anyone who doesn't recognize that), 
> and I got the following encouraging numbers:
> 
> <?php
> $_POST['foo'] = 'bar';
> 
> for($i = 0; $i<1000000; $i++)
>    $b = $_POST['foo'];
> ?>
> 
> [current -- without patch]
> $ time sapi/cli/php -f test.php
> real    0m1.057s
> user    0m0.660s
> sys     0m0.000s
> 
> 
> [with patch]
> $ time sapi/cli/php -f test.php
> real    0m0.490s
> user    0m0.467s
> sys     0m0.000s
> 
> Even looking at just the user times, the gain is in the right 
> direction 
> and is a fair percentage...

So your patch makes sense.
Could you also run Zend/bench.php to check that patch doesn't slowdown local
fetches.
I think the patch can be commited into HEAD (not into PHP_5_2), but I would
prefer collect all performance patches and commit them into PHP_5_3 and HEAD
together.
 
> > According to ZEND_BEGIN_SILENCE, just try to run simple 
> script <?php 
> > $x = @$y;?> with and without this check. In case of missing check, 
> > real $y fetch is performed in ASSIGN operator after 
> ZEND_END_SILENCE, 
> > so we see error message.
> > 
> Ah, of course, that makes perfect sense...  And I've got to 
> say, that's 
> a clever solution to that problem.  It does unnecessarily rob DIM/OBJ 
> fetches in a localized silence ($foo = @$bar[$baz];) of being CV when 
> those technically could, but that's a fairly small price to 
> pay for the 
> elegance of the solution.

I would be glad to look into another solution, but I cannot even imagine it.
PHP language wasn't designed to be fast :(

> So leaving the silence alone (since it's necessary), and 
> considering the 
> appearant gain for a minor code change, what are your thoughts on 
> tossing this in as is and looking at extending it for 
> $GLOBALS['foo'] -> 
> (global fetch CV)$foo later on?

Agree. See above.

Dmitry.

> -Sara
> 
> -- 
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
> 

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to