Skip to content

Get rid off implicit new/delete by std::vector when invoking a function #2013

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 40 commits into
base: master
Choose a base branch
from
Open

Conversation

tarasko
Copy link

@tarasko tarasko commented Nov 30, 2019

Hi all, I've implemented the idea proposed in #2005

It does significantly improve performance of a single function call, there is no new/deletes anymore.
It comes with a cost of roughly 8% binary size increase

Additionally has_args, has_kwargs and nargs have become compile time arguments. Some checks from the former dispatcher code can now be completely ruled out by compiler

I had to remove vector<function_call> passed between first and second passes. I think that has significantly simplified the code, however I didn't measure whether it slows down function calls with many overloads.

The number below are very much approximate, I was running tests on a linux virtual machine
old
588 ns ± 113 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
------ pybind11_tests.cpython-37m-x86_64-linux-gnu.so file size: 3293632

new
411 ns ± 46.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
------ pybind11_tests.cpython-37m-x86_64-linux-gnu.so file size: 3559912

pure python
250 ns ± 9.25 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

@tarasko tarasko marked this pull request as ready for review December 8, 2019 20:08
skoslowski and others added 2 commits December 23, 2019 01:36
* Add FAQ entry, with code example, for dealing with long functions interruption
@Skylion007
Copy link
Collaborator

@tarasko Are you still around and interested in getting this merged?

Copy link
Collaborator

@Skylion007 Skylion007 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Definitely would be interested in a modernized version of this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.