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

Replace std::function with hyper_function for a 37% speedup in compile time #67

Open
wants to merge 2 commits into
base: master
from

Conversation

Projects
None yet
1 participant
@Quuxplusone
Copy link
Contributor

Quuxplusone commented Jan 6, 2019

commit f6f96e1

Fix some minor std::function-related bugs.

Lambdas to be stored in `function<void()>` should not return `bool`.

Two uses of `std::function` could be just `function`, like everywhere
else in the codebase.

commit 4b3b2fd

Replace std::function with hyper_function for a 37% speedup in compile time.

Before:

    time c++ -O2 -DMAC -I/usr/local/include -std=c++11 -march=native
             -W -Wall -Wextra -Werror -pedantic -Wno-format-pedantic
             -Wno-missing-field-initializers -Wno-unused-parameter
             -DCAP_GLEW=0 -DCAP_PNG=0    -c hyper.cpp -o hyper.o

    real 2m22.508s
    user 2m20.625s
    sys  0m1.648s

After:

    time c++ -O2 -DMAC -I/usr/local/include -std=c++11 -march=native
             -W -Wall -Wextra -Werror -pedantic -Wno-format-pedantic
             -Wno-missing-field-initializers -Wno-unused-parameter
             -DCAP_GLEW=0 -DCAP_PNG=0    -c hyper.cpp -o hyper.o

    real 1m30.515s
    user 1m29.793s
    sys  0m0.689s

Comparing object file size:

    -rw-r--r--  1 ajo  staff  8215036 Jan  5 20:46 old-hyper.o
    -rw-r--r--  1 ajo  staff  7547232 Jan  5 20:47 new-hyper.o

Comparing number of symbols:

    nm old-hyper.o | wc -l  => 12590
    nm new-hyper.o | wc -l  =>  9742

No appreciable difference in link time; the linker takes less than
half a second in either case.
Fix some minor std::function-related bugs.
Lambdas to be stored in `function<void()>` should not return `bool`.

Two uses of `std::function` could be just `function`, like everywhere
else in the codebase.
@Quuxplusone

This comment has been minimized.

Copy link
Contributor

Quuxplusone commented Jan 7, 2019

Interestingly, I did a global sed to replace = [] with = +[] and the compile time went back up from 1m30s to 1m50s (even as the number of distinct symbols in the nm output dropped from 9742 to 9132). I don't know how to explain that increase in compile time.

I've verified that this change would be acceptable to MSVC according to the AppVeyor build; although the AppVeyor build is currently broken for some reason related to SDL include paths.

Replace std::function with hyper_function for a 37% speedup in compil…
…e time.

Before:

    time c++ -O2 -DMAC -I/usr/local/include -std=c++11 -march=native
             -W -Wall -Wextra -Werror -pedantic -Wno-format-pedantic
             -Wno-missing-field-initializers -Wno-unused-parameter
             -DCAP_GLEW=0 -DCAP_PNG=0    -c hyper.cpp -o hyper.o

    real 2m22.508s
    user 2m20.625s
    sys  0m1.648s

After:

    time c++ -O2 -DMAC -I/usr/local/include -std=c++11 -march=native
             -W -Wall -Wextra -Werror -pedantic -Wno-format-pedantic
             -Wno-missing-field-initializers -Wno-unused-parameter
             -DCAP_GLEW=0 -DCAP_PNG=0    -c hyper.cpp -o hyper.o

    real 1m30.515s
    user 1m29.793s
    sys  0m0.689s

Comparing object file size:

    -rw-r--r--  1 ajo  staff  8215036 Jan  5 20:46 old-hyper.o
    -rw-r--r--  1 ajo  staff  7538072 Jan  5 20:47 new-hyper.o

Comparing number of symbols:

    nm old-hyper.o | wc -l  => 12590
    nm new-hyper.o | wc -l  =>  9742

No appreciable difference in link time; the linker takes less than
half a second in either case.

@Quuxplusone Quuxplusone force-pushed the Quuxplusone:function branch from 4b3b2fd to b69ec2e Jan 9, 2019

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