Hi guys, thanks for your replies. 250ns sounded like a lot, and apparently it was. I can't reproduce it anymore.
Thanks for the confirmation that API and ABI modes should have the same performance. I looked at the jitlog, and both api, abi and cast pointer seem to produce exactly the same code (assuming I bind the function to its own variable). Cheers, Dimitri. On Wed, Sep 26, 2018 at 11:05 PM Armin Rigo <armin.r...@gmail.com> wrote: > Hi Carl Friedrich, > > On Wed, 26 Sep 2018 at 22:28, Carl Friedrich Bolz-Tereick <cfb...@gmx.de> > wrote: > > Couldn't that slowness of getattr be fixed by making the lib objects eg > use module dicts or something? > > If we use the out-of-line API mode then ``lib`` is an RPython object, > but if we use the in-line ABI mode then it's a pure Python object. > More precisely it's a singleton instance of a newly created Python > class, and the two extra instructions are reading and guard_value'ing > the map. > > It might be possible to rewrite the whole section of pure-Python code > making the ``lib`` for the in-line ABI mode, but that looks like it > would be even slower on CPython. And I don't like the idea of > duplicating---or even making any non-necessary changes to---this > slightly-fragile-looking logic... > > Anyway, I'm not sure to understand how just a guard_value on the map > of an object can cause a 250 ns slow-down. I'd rather have thought it > would cause no measurable difference. Maybe I missed another > difference. Maybe the effect is limited to microbenchmarks. Likely > another mystery of modern CPUs. > > > A bientôt, > > Armin. >
_______________________________________________ pypy-dev mailing list pypy-dev@python.org https://mail.python.org/mailman/listinfo/pypy-dev