Thanks for analizing.
did you say "8.5 more" instructions?
in my test I saw "less".

It's really an intermedie step, and we probably will check if other
optimizations are reaaly benefitable before committing this. But yes, this
patch doesn't make any degradation, except for slight increase of memory
consumption.

Thanks. Dmitry.
On Jan 1, 2015 12:26 AM, "Anatol Belski" <anatol....@belski.net> wrote:

> Hi Dmitry,
>
> On Wed, December 31, 2014 11:19, Dmitry Stogov wrote:
> > Hi,
> >
> >
> > Please take a look into the patch
> >
> >
> > https://github.com/php/php-src/pull/970/files
> >
> >
> > This real changes are in zend_types.h, the rest is renaming that in most
> > cases makes code cleaner.
> >
> > zend_array didn't change its binary representation, but now it's not
> > possible to get a pointer to embedded HashTable. The same zend_array
> > shoukd be used instead.
> >
> > Each HashTable got an extra 64-bit zend_refcounted header. This leads to
> > some increase in memory consumption.
> >
> > The performance is slightly increased (may be measured with callgrind).
> >
> >
> > The patch beaks one test (tests/lang/foreachLoopObjects.006.phpt), but
> > actually it just disclose a problem that we have anyway.
> >
> > The patch should be a base for the future optimizations. e.g. removing
> > HashTable->arData and/or HashTable->arHash and allocating them together
> > with zend_array; introducing EG(empty_array) etc.
> >
> > Opinions are welcome...
> >
> >
> > Thanks. Dmitry.
> >
> >
> I've tested the patch on Windows x64 TS build. On my laptop the profiler
> tells 8.5m more instructions retired. I guess that's because of less
> dereferencing happening (it operates faster and pipelines have more idle
> time). Also there's less branch misprediction and a negligible memory
> usage increase. All in all - the patch is probably more like an
> intermediate step to the further optimization you mention. But even in the
> current patch state - there's no impact.
>
> Regards
>
> Anatol
>

Reply via email to