Skip to content

Instantly share code, notes, and snippets.

@mpark
Last active August 29, 2015 14:16
Show Gist options
  • Save mpark/3c5d7cda5af76067f090 to your computer and use it in GitHub Desktop.
Save mpark/3c5d7cda5af76067f090 to your computer and use it in GitHub Desktop.
Performance test script for https://github.com/ericniebler/meta/pull/3
#!/usr/bin/env python
import os
import subprocess
import tempfile
for n in xrange(100, 2001, 100):
with tempfile.NamedTemporaryFile(suffix='.cpp') as f:
f.write('#include <type_traits>\n')
f.write('#include <meta/meta.hpp>\n')
f.write('\n')
for x in xrange(n):
f.write('class T{} {{}};\n'.format(x))
f.write('\n')
l = 'meta::list<{}>'.format(', '.join('T{}'.format(x) for x in xrange(n)))
f.write('static_assert(std::is_same<meta::unique<{0}>, {0}>::value, "");\n'.format(l))
f.write('\n')
f.write('int main() {}\n')
f.flush()
result = subprocess.check_output(
['time',
'clang++',
'-std=c++11',
'-ftemplate-depth=2048',
'-I{}'.format(os.path.join(os.getcwd(), '../include')),
'-o',
'/dev/null',
f.name],
stderr=subprocess.STDOUT)
print n, '\t\t', result.strip()
% cd <meta>/test
% wget https://gist.githubusercontent.com/mpark/3c5d7cda5af76067f090/raw/1df2bbe3fe4f5e3e489b68fcc3e7ed4442878ea6/perf_test.py
% git checkout master
% python perf_test.py
100     0.27 real         0.23 user         0.02 sys
200     1.50 real         1.35 user         0.14 sys
300     4.94 real         4.46 user         0.46 sys
400     11.39 real        10.31 user        1.04 sys
500     20.25 real        18.37 user        1.86 sys
600     37.66 real        33.40 user        3.64 sys
700     62.53 real        54.46 user        6.62 sys
800     104.65 real       85.94 user        13.21 sys
^C
% git checkout unique
% python perf_test.py
100 		0.08 real         0.06 user         0.01 sys
200 		0.17 real         0.15 user         0.01 sys
300 		0.32 real         0.28 user         0.02 sys
400 		0.50 real         0.45 user         0.04 sys
500 		0.81 real         0.74 user         0.06 sys
600 		1.17 real         1.06 user         0.10 sys
700 		1.52 real         1.38 user         0.11 sys
800 		1.91 real         1.75 user         0.15 sys
900 		2.54 real         2.33 user         0.19 sys
1000 		3.27 real         2.99 user         0.26 sys
1100 		3.93 real         3.62 user         0.29 sys
1200 		4.41 real         4.07 user         0.33 sys
1300 		5.15 real         4.76 user         0.36 sys
1400 		6.23 real         5.77 user         0.44 sys
1500 		7.30 real         6.76 user         0.52 sys
1600 		8.40 real         7.80 user         0.58 sys
1700 		9.92 real         9.18 user         0.71 sys
1800 		10.82 real        10.06 user        0.74 sys
1900 		12.82 real        11.92 user        0.86 sys
2000 		14.24 real        13.25 user        0.94 sys
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment