From aaedf1d5857868150abb0d36f9795a606b8121a8 Mon Sep 17 00:00:00 2001 From: Avril Date: Fri, 27 Nov 2020 16:41:13 +0000 Subject: [PATCH] update TODO --- .gitignore | 1 - TODO.org | 27 ++ profiling/debug-flame-old.svg | 419 +++++++++++++++++++++++ profiling/debug-flame.svg | 419 +++++++++++++++++++++++ profiling/debug-flameu.svg | 419 +++++++++++++++++++++++ profiling/massif.out.520307 | 567 ++++++++++++++++++++++++++++++++ profiling/mem-small.png | Bin 0 -> 4224 bytes profiling/mem-smallu.png | Bin 0 -> 4560 bytes profiling/mem.png | Bin 0 -> 3243 bytes profiling/old-mem-small.png | Bin 0 -> 3655 bytes profiling/old-mem-smallu.png | Bin 0 -> 4240 bytes profiling/old-mem.png | Bin 0 -> 3048 bytes profiling/release-flame-old.svg | 419 +++++++++++++++++++++++ profiling/release-flame.svg | 419 +++++++++++++++++++++++ profiling/release-flameu.svg | 419 +++++++++++++++++++++++ 15 files changed, 3108 insertions(+), 1 deletion(-) create mode 100644 profiling/debug-flame-old.svg create mode 100644 profiling/debug-flame.svg create mode 100644 profiling/debug-flameu.svg create mode 100644 profiling/massif.out.520307 create mode 100644 profiling/mem-small.png create mode 100644 profiling/mem-smallu.png create mode 100644 profiling/mem.png create mode 100644 profiling/old-mem-small.png create mode 100644 profiling/old-mem-smallu.png create mode 100644 profiling/old-mem.png create mode 100644 profiling/release-flame-old.svg create mode 100644 profiling/release-flame.svg create mode 100644 profiling/release-flameu.svg diff --git a/.gitignore b/.gitignore index 3fa48f6..28eeec4 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,3 @@ obj build/ test/ shuffle3-* -profiling/ diff --git a/TODO.org b/TODO.org index ad35f41..5d9dd3e 100644 --- a/TODO.org +++ b/TODO.org @@ -26,6 +26,33 @@ - Can properly handle large files without core dumping - Doesn't dump huge amounts of trash onto each stack frame +** Performance + ~[[https://github.com/sharkdp/hyperfine][hyperfine]]~ reports a *700-800%* speedup over =v1=. + + It's easy to see why. +*** V1 flamegraph + V1 uses a pesudo-array adaptor to perform filesystem reads, seeks, and writes. This causes a massive syscall overhead. + [[./profiling/release-flame-old.svg]] +*** V2 flamegraph + Whereas V2 uses a single ~mmap()~. + [[./profiling/release-flame.svg]] + +** Memory usage + The ~[[https://www.systutorials.com/docs/linux/man/1-memusage/][memusage]]~ graph for =v1= shows extremely inefficient stack usage. + [[./profiling/old-mem.png]] + ( the green is supposed to be a line, not a bar) + This is due to how the unshuffler buffers RNG results. + + =v1= naively used VLAs to store this buffer, which can baloon to 8 times the size of the file being unshuffled. + It dumps this massive buffer onto the stack frame of a function that is called multiple times, causing massive and inefficient stack usage. + + This can cause a segfault when attempting to unshuffle a large file, while shuffling a file of the same size might succeed. + +*** V2 improvement + The ~memusage~ graph for =v2= is a lot more sane. + [[./profiling/mem.png]] + + ~v2~ instead allocates this buffer on the heap. Note the stable stack and heap usage. * Todo - [X] impl rng - [X] impl shuffling diff --git a/profiling/debug-flame-old.svg b/profiling/debug-flame-old.svg new file mode 100644 index 0000000..f76d18b --- /dev/null +++ b/profiling/debug-flame-old.svg @@ -0,0 +1,419 @@ +Flame Graph Reset ZoomSearch __GI__IO_free_backup_area (28 samples, 0.30%)__GI__IO_sgetn (30 samples, 0.32%)__GI__IO_switch_to_get_mode (23 samples, 0.24%)__GI___libc_free (14 samples, 0.15%)__lseek64 (85 samples, 0.90%)new_do_write (15 samples, 0.16%)[[heap]] (224 samples, 2.38%)[[..__GI__IO_file_overflow (12 samples, 0.13%)__GI__IO_file_seekoff (30 samples, 0.32%)_ar_file_set (23 samples, 0.24%)[[stack]] (116 samples, 1.23%)_IO_file_xsgetn (31 samples, 0.33%)_IO_seekoff_unlocked (17 samples, 0.18%)[anon] (53 samples, 0.56%)_IO_new_file_xsputn (68 samples, 0.72%)[libc-2.32.so] (72 samples, 0.77%)_IO_file_xsgetn (17 samples, 0.18%)_IO_new_file_write (40 samples, 0.43%)_IO_new_file_xsputn (19 samples, 0.20%)_IO_seekoff_unlocked (16 samples, 0.17%)__GI__IO_default_xsputn (15 samples, 0.16%)__GI__IO_file_overflow (27 samples, 0.29%)__GI__IO_file_seekoff (151 samples, 1.61%)__GI__IO_fread (43 samples, 0.46%)__GI__IO_fwrite (275 samples, 2.93%)__..__GI___libc_malloc (11 samples, 0.12%)__GI___libc_write (48 samples, 0.51%)__GI___read (109 samples, 1.16%)__GI_fseek (40 samples, 0.43%)__lseek64 (119 samples, 1.27%)_int_free (26 samples, 0.28%)ar_set (18 samples, 0.19%)new_do_write (130 samples, 1.38%)[unknown] (1,142 samples, 12.15%)[unknown]_IO_file_xsgetn (11 samples, 0.12%)__GI__IO_default_xsputn (13 samples, 0.14%)_IO_file_xsgetn (12 samples, 0.13%)__GI__IO_fread (26 samples, 0.28%)__GI_fseek (111 samples, 1.18%)__GI__IO_file_seekoff (71 samples, 0.76%)__lseek64 (46 samples, 0.49%)_int_free (13 samples, 0.14%)ar_get (197 samples, 2.10%)a.._ar_file_get (190 samples, 2.02%)_..minmax_floats (214 samples, 2.28%)m..__GI__IO_fread (13 samples, 0.14%)__GI_fseek (29 samples, 0.31%)__GI__IO_file_seekoff (17 samples, 0.18%)__lseek64 (11 samples, 0.12%)minmax_int64_ts (61 samples, 0.65%)ar_get (61 samples, 0.65%)_ar_file_get (56 samples, 0.60%)_IO_file_xsgetn (26 samples, 0.28%)__GI__IO_fread (59 samples, 0.63%)__GI___libc_free (17 samples, 0.18%)__GI___libc_malloc (25 samples, 0.27%)_IO_seekoff_unlocked (20 samples, 0.21%)__GI__IO_free_backup_area (15 samples, 0.16%)__GI_fseek (314 samples, 3.34%)__G..__GI__IO_file_seekoff (184 samples, 1.96%)_..__lseek64 (94 samples, 1.00%)_int_free (32 samples, 0.34%)ar_get (519 samples, 5.52%)ar_get_ar_file_get (503 samples, 5.35%)_ar_fil..minmax_sbytes (548 samples, 5.83%)minmax_..ar_size (11 samples, 0.12%)ar_set (36 samples, 0.38%)_IO_file_xsgetn (47 samples, 0.50%)__memmove_avx_unaligned_erms (14 samples, 0.15%)__GI__IO_fread (118 samples, 1.26%)__GI__IO_sgetn (10 samples, 0.11%)__GI___libc_free (58 samples, 0.62%)__GI___libc_malloc (32 samples, 0.34%)_IO_seekoff_unlocked (20 samples, 0.21%)__GI__IO_free_backup_area (17 samples, 0.18%)__GI___read (159 samples, 1.69%)__GI_fseek (622 samples, 6.62%)__GI_fseek__GI__IO_file_seekoff (536 samples, 5.70%)__GI__I..__lseek64 (160 samples, 1.70%)_int_free (62 samples, 0.66%)ar_get (1,054 samples, 11.22%)ar_get_ar_file_get (1,023 samples, 10.89%)_ar_file_get__memmove_avx_unaligned_erms (20 samples, 0.21%)_IO_file_xsgetn (44 samples, 0.47%)__memmove_avx_unaligned_erms (11 samples, 0.12%)__GI__IO_fread (132 samples, 1.40%)__GI__IO_sgetn (18 samples, 0.19%)__GI___libc_free (61 samples, 0.65%)__GI___libc_malloc (28 samples, 0.30%)_IO_seekoff_unlocked (20 samples, 0.21%)[libc-2.32.so] (21 samples, 0.22%)__GI__IO_free_backup_area (88 samples, 0.94%)__GI___libc_free (61 samples, 0.65%)_IO_new_file_write (245 samples, 2.61%)_I..__GI___libc_write (147 samples, 1.56%)_IO_new_do_write (477 samples, 5.08%)_IO_ne..new_do_write (472 samples, 5.02%)new_do..__lseek64 (149 samples, 1.59%)__GI__IO_switch_to_get_mode (519 samples, 5.52%)__GI__I..__GI__IO_file_overflow (11 samples, 0.12%)__GI___read (153 samples, 1.63%)__GI_fseek (1,166 samples, 12.41%)__GI_fseek__GI__IO_file_seekoff (1,092 samples, 11.62%)__GI__IO_file_see..__lseek64 (129 samples, 1.37%)_init (45 samples, 0.48%)_int_free (74 samples, 0.79%)ar_get (1,715 samples, 18.25%)ar_get_ar_file_get (1,687 samples, 17.95%)_ar_file_getar_get_into (1,803 samples, 19.19%)ar_get_into_IO_new_do_write (10 samples, 0.11%)__GI__IO_default_xsputn (104 samples, 1.11%)__GI__IO_fwrite (974 samples, 10.37%)__GI__IO_fwrite_IO_new_file_xsputn (566 samples, 6.02%)_IO_new_..__GI__IO_file_overflow (84 samples, 0.89%)_IO_seekoff_unlocked (44 samples, 0.47%)__GI__IO_file_read (12 samples, 0.13%)[libc-2.32.so] (25 samples, 0.27%)__GI__IO_free_backup_area (123 samples, 1.31%)__GI___libc_free (85 samples, 0.90%)_IO_new_file_write (239 samples, 2.54%)_I..__GI___libc_write (146 samples, 1.55%)_IO_new_do_write (492 samples, 5.24%)_IO_ne..new_do_write (482 samples, 5.13%)new_do..__lseek64 (162 samples, 1.72%)__GI__IO_switch_to_get_mode (524 samples, 5.58%)__GI__I..__GI__IO_file_overflow (14 samples, 0.15%)__GI___read (294 samples, 3.13%)__G..__GI_fseek (1,837 samples, 19.55%)__GI_fseek__GI__IO_file_seekoff (1,660 samples, 17.67%)__GI__IO_file_seekoff__lseek64 (296 samples, 3.15%)__l..ar_swap (6,142 samples, 65.37%)ar_swapar_set (3,124 samples, 33.25%)ar_set_ar_file_set (3,031 samples, 32.26%)_ar_file_setfwrite@plt (41 samples, 0.44%)[libm-2.32.so] (18 samples, 0.19%)rand (89 samples, 0.95%)__random (89 samples, 0.95%)__random_r (60 samples, 0.64%)_next (164 samples, 1.75%)[libm-2.32.so] (87 samples, 0.93%)dot (20 samples, 0.21%)fract (24 samples, 0.26%)next (205 samples, 2.18%)n..sample_double (165 samples, 1.76%)[libm-2.32.so] (64 samples, 0.68%)dot (27 samples, 0.29%)fract (16 samples, 0.17%)_sample (341 samples, 3.63%)_sam..sample_double (130 samples, 1.38%)shuffle (6,898 samples, 73.41%)shufflerng_next_int (636 samples, 6.77%)rng_next_..all (9,396 samples, 100%)shuffle3-debug (9,396 samples, 100.00%)shuffle3-debug_start (7,735 samples, 82.32%)_start__libc_start_main (7,731 samples, 82.28%)__libc_start_mainmain (7,731 samples, 82.28%)mainshuffle3 (7,731 samples, 82.28%)shuffle3 \ No newline at end of file diff --git a/profiling/debug-flame.svg b/profiling/debug-flame.svg new file mode 100644 index 0000000..fd3789c --- /dev/null +++ b/profiling/debug-flame.svg @@ -0,0 +1,419 @@ +Flame Graph Reset ZoomSearch [[stack]] (1 samples, 0.75%)std::__array_traits<double, 2ul>::_S_ref (1 samples, 0.75%)RNG::next_long (2 samples, 1.50%)[unknown] (3 samples, 2.26%)[..rng::drng::sample (1 samples, 0.75%)minmax_t<long> (1 samples, 0.75%)minmax_t<long, minmax_t<long>(span<long> const&)::{lambda(long)#1}> (1 samples, 0.75%)span<long>::operator[] (1 samples, 0.75%)minmax_t<signed char> (1 samples, 0.75%)minmax_t<signed char> (9 samples, 6.77%)minmax_t<..minmax_t<signed char, minmax_t<signed char>(span<signed char> const&)::{lambda(signed char)#1}> (9 samples, 6.77%)minmax_t<..span<signed char>::operator[] (2 samples, 1.50%)[libm-2.32.so] (1 samples, 0.75%)[libm-2.32.so] (9 samples, 6.77%)[libm-2.3..rng::frng::sample_double (14 samples, 10.53%)rng::frng::samp..rng::frng::dot<2ul> (5 samples, 3.76%)rng:..std::array<double, 2ul>::operator[] (2 samples, 1.50%)std::__array_traits<double, 2ul>::_S_ref (2 samples, 1.50%)[libm-2.32.so] (16 samples, 12.03%)[libm-2.32.so]rng::frng::dot<2ul> (14 samples, 10.53%)rng::frng::dot<..std::array<double, 2ul>::operator[] (8 samples, 6.02%)std::arr..std::__array_traits<double, 2ul>::_S_ref (4 samples, 3.01%)std..rng::frng::sample_double (36 samples, 27.07%)rng::frng::sample_doublerng::frng::fract (3 samples, 2.26%)r..[libm-2.32.so] (2 samples, 1.50%)RNG::next_long (58 samples, 43.61%)RNG::next_longRNG::next_long (57 samples, 42.86%)RNG::next_longrng::frng::sample (55 samples, 41.35%)rng::frng::samplerng::frng::update_state (41 samples, 30.83%)rng::frng::update_statestd::array<double, 2ul>::operator[] (2 samples, 1.50%)std::__array_traits<double, 2ul>::_S_ref (2 samples, 1.50%)rng::shuffle<float, rng::frng> (65 samples, 48.87%)rng::shuffle<float, rng::frng>std::swap<float> (7 samples, 5.26%)std::s..RNG::next_long (10 samples, 7.52%)RNG::next_..rng::drng::sample (5 samples, 3.76%)rng:..rand_r (2 samples, 1.50%)RNG::next_long (11 samples, 8.27%)RNG::next_lo..rng::drng::sample (1 samples, 0.75%)span<unsigned char>::operator[] (3 samples, 2.26%)s..rng::shuffle<unsigned char, rng::drng> (47 samples, 35.34%)rng::shuffle<unsigned char, rng::drng>std::swap<unsigned char> (29 samples, 21.80%)std::swap<unsigned char>__libc_start_main (123 samples, 92.48%)__libc_start_mainmain (123 samples, 92.48%)maindo_work (123 samples, 92.48%)do_workwork::xshuffle_ip<false> (123 samples, 92.48%)work::xshuffle_ip<false>std::swap<unsigned char> (1 samples, 0.75%)_start (128 samples, 96.24%)_start_dl_start (1 samples, 0.75%)_dl_sysdep_start (1 samples, 0.75%)dl_main (1 samples, 0.75%)all (133 samples, 100%)shuffle3-debug (133 samples, 100.00%)shuffle3-debugrng::frng::fract (1 samples, 0.75%) \ No newline at end of file diff --git a/profiling/debug-flameu.svg b/profiling/debug-flameu.svg new file mode 100644 index 0000000..6db6ca2 --- /dev/null +++ b/profiling/debug-flameu.svg @@ -0,0 +1,419 @@ +Flame Graph Reset ZoomSearch [libm-2.32.so] (2 samples, 0.82%)__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >::__normal_iterator (1 samples, 0.41%)operator new (1 samples, 0.41%)rng::frng::sample_double (1 samples, 0.41%)std::__array_traits<double, 2ul>::_S_ref (1 samples, 0.41%)std::vector<unsigned long, std::allocator<unsigned long> >::end (2 samples, 0.82%)[[stack]] (9 samples, 3.67%)[[st..std::vector<unsigned long, std::allocator<unsigned long> >::push_back (1 samples, 0.41%)[anon] (2 samples, 0.82%)RNG::next_long (2 samples, 0.82%)[unknown] (1 samples, 0.41%)std::__array_traits<double, 2ul>::_S_ref (1 samples, 0.41%)minmax_t<float, work::xshuffle_ip<true>(char const*)::{lambda(float)#1}> (4 samples, 1.63%)work::xshuffle_ip<true> (1 samples, 0.41%)minmax_t<long> (1 samples, 0.41%)minmax_t<long, minmax_t<long>(span<long> const&)::{lambda(long)#1}> (1 samples, 0.41%)span<long>::operator[] (1 samples, 0.41%)minmax_t<signed char> (1 samples, 0.41%)minmax_t<signed char, minmax_t<signed char>(span<signed char> const&)::{lambda(signed char)#1}> (1 samples, 0.41%)[libm-2.32.so] (9 samples, 3.67%)[lib..rng::frng::dot<2ul> (4 samples, 1.63%)std::array<double, 2ul>::operator[] (1 samples, 0.41%)std::__array_traits<double, 2ul>::_S_ref (1 samples, 0.41%)rng::frng::fract (4 samples, 1.63%)[libm-2.32.so] (1 samples, 0.41%)rng::frng::sample_double (19 samples, 7.76%)rng::frng::..std::array<double, 2ul>::operator[] (1 samples, 0.41%)[libm-2.32.so] (15 samples, 6.12%)[libm-2...std::__array_traits<double, 2ul>::_S_ref (2 samples, 0.82%)rng::frng::dot<2ul> (14 samples, 5.71%)rng::fr..std::array<double, 2ul>::operator[] (6 samples, 2.45%)st..std::__array_traits<double, 2ul>::_S_ref (4 samples, 1.63%)rng::frng::sample_double (36 samples, 14.69%)rng::frng::sample_doub..rng::frng::fract (4 samples, 1.63%)[libm-2.32.so] (1 samples, 0.41%)rng::frng::update_state (39 samples, 15.92%)rng::frng::update_statestd::array<double, 2ul>::operator[] (3 samples, 1.22%)std::__array_traits<double, 2ul>::_S_ref (2 samples, 0.82%)RNG::next_long (59 samples, 24.08%)RNG::next_longRNG::next_long (59 samples, 24.08%)RNG::next_longrng::frng::sample (59 samples, 24.08%)rng::frng::samplestd::array<double, 2ul>::operator[] (1 samples, 0.41%)std::swap<float> (10 samples, 4.08%)std:..std::vector<unsigned long, std::allocator<unsigned long> >::back (2 samples, 0.82%)std::vector<unsigned long, std::allocator<unsigned long> >::pop_back (1 samples, 0.41%)std::allocator_traits<std::allocator<unsigned long> >::construct<unsigned long, unsigned long> (1 samples, 0.41%)std::vector<unsigned long, std::allocator<unsigned long> >::push_back (3 samples, 1.22%)std::vector<unsigned long, std::allocator<unsigned long> >::emplace_back<unsigned long> (3 samples, 1.22%)std::vector<unsigned long, std::allocator<unsigned long> >::back (1 samples, 0.41%)rng::unshuffle<float, rng::frng> (79 samples, 32.24%)rng::unshuffle<float, rng::frng>std::vector<unsigned long, std::allocator<unsigned long> >::vector (1 samples, 0.41%)std::vector<unsigned long, std::allocator<unsigned long> >::_M_default_initialize (1 samples, 0.41%)std::__uninitialized_default_n_a<unsigned long*, unsigned long, unsigned long> (1 samples, 0.41%)std::__uninitialized_default_n<unsigned long*, unsigned long> (1 samples, 0.41%)std::__uninitialized_default_n_1<true>::__uninit_default_n<unsigned long*, unsigned long> (1 samples, 0.41%)std::fill_n<unsigned long*, unsigned long, unsigned long> (1 samples, 0.41%)std::__fill_n_a<unsigned long*, unsigned long, unsigned long> (1 samples, 0.41%)std::__fill_a<unsigned long*, unsigned long> (1 samples, 0.41%)std::__fill_a1<unsigned long*, unsigned long> (1 samples, 0.41%)[libm-2.32.so] (2 samples, 0.82%)RNG::next_long (9 samples, 3.67%)RNG:..RNG::next_long (9 samples, 3.67%)RNG:..rng::xoroshiro128plus::sample (7 samples, 2.86%)rn..rng::next (5 samples, 2.04%)r..std::array<unsigned long, 2ul>::operator[] (1 samples, 0.41%)std::swap<long> (4 samples, 1.63%)std::move<long&> (1 samples, 0.41%)std::vector<unsigned long, std::allocator<unsigned long> >::back (2 samples, 0.82%)__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >::operator* (2 samples, 0.82%)std::allocator_traits<std::allocator<unsigned long> >::construct<unsigned long, unsigned long> (1 samples, 0.41%)std::construct_at<unsigned long, unsigned long> (1 samples, 0.41%)std::vector<unsigned long, std::allocator<unsigned long> >::push_back (2 samples, 0.82%)std::vector<unsigned long, std::allocator<unsigned long> >::emplace_back<unsigned long> (2 samples, 0.82%)std::vector<unsigned long, std::allocator<unsigned long> >::back (1 samples, 0.41%)__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >::operator- (1 samples, 0.41%)rng::unshuffle<long, rng::xoroshiro128plus> (20 samples, 8.16%)rng::unshuf..std::vector<unsigned long, std::allocator<unsigned long> >::vector (1 samples, 0.41%)std::vector<unsigned long, std::allocator<unsigned long> >::_M_default_initialize (1 samples, 0.41%)std::__uninitialized_default_n_a<unsigned long*, unsigned long, unsigned long> (1 samples, 0.41%)std::__uninitialized_default_n<unsigned long*, unsigned long> (1 samples, 0.41%)std::__uninitialized_default_n_1<true>::__uninit_default_n<unsigned long*, unsigned long> (1 samples, 0.41%)std::fill_n<unsigned long*, unsigned long, unsigned long> (1 samples, 0.41%)std::__fill_n_a<unsigned long*, unsigned long, unsigned long> (1 samples, 0.41%)std::__fill_a<unsigned long*, unsigned long> (1 samples, 0.41%)std::__fill_a1<unsigned long*, unsigned long> (1 samples, 0.41%)[libm-2.32.so] (3 samples, 1.22%)rand_r (7 samples, 2.86%)ra..RNG::next_long (29 samples, 11.84%)RNG::next_longRNG::next_long (29 samples, 11.84%)RNG::next_longrng::drng::sample (18 samples, 7.35%)rng::drng:..rand_r@plt (2 samples, 0.82%)span<unsigned char>::operator[] (3 samples, 1.22%)span<unsigned char>::size (1 samples, 0.41%)std::swap<unsigned char> (42 samples, 17.14%)std::swap<unsigned char>std::move<unsigned char&> (3 samples, 1.22%)__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >::operator* (3 samples, 1.22%)__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >::operator- (4 samples, 1.63%)std::vector<unsigned long, std::allocator<unsigned long> >::back (10 samples, 4.08%)std:..std::vector<unsigned long, std::allocator<unsigned long> >::end (1 samples, 0.41%)__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >::__normal_iterator (1 samples, 0.41%)std::vector<unsigned long, std::allocator<unsigned long> >::pop_back (3 samples, 1.22%)std::allocator_traits<std::allocator<unsigned long> >::destroy<unsigned long> (2 samples, 0.82%)std::destroy_at<unsigned long> (2 samples, 0.82%)std::allocator_traits<std::allocator<unsigned long> >::construct<unsigned long, unsigned long> (1 samples, 0.41%)std::construct_at<unsigned long, unsigned long> (3 samples, 1.22%)std::allocator_traits<std::allocator<unsigned long> >::construct<unsigned long, unsigned long> (5 samples, 2.04%)s..std::forward<unsigned long> (1 samples, 0.41%)__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >::operator* (2 samples, 0.82%)__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >::operator- (3 samples, 1.22%)__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >::__normal_iterator (2 samples, 0.82%)rng::unshuffle<unsigned char, rng::drng> (120 samples, 48.98%)rng::unshuffle<unsigned char, rng::drng>std::vector<unsigned long, std::allocator<unsigned long> >::push_back (24 samples, 9.80%)std::vector<un..std::vector<unsigned long, std::allocator<unsigned long> >::emplace_back<unsigned long> (23 samples, 9.39%)std::vector<u..std::vector<unsigned long, std::allocator<unsigned long> >::back (14 samples, 5.71%)std::ve..std::vector<unsigned long, std::allocator<unsigned long> >::end (4 samples, 1.63%)__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >::__normal_iterator (4 samples, 1.63%)span<unsigned char>::operator[] (1 samples, 0.41%)__libc_start_main (228 samples, 93.06%)__libc_start_mainmain (228 samples, 93.06%)maindo_work (228 samples, 93.06%)do_workwork::xshuffle_ip<true> (228 samples, 93.06%)work::xshuffle_ip<true>std::vector<unsigned long, std::allocator<unsigned long> >::push_back (2 samples, 0.82%)all (245 samples, 100%)shuffle3-debug (245 samples, 100.00%)shuffle3-debug_start (233 samples, 95.10%)_start_dl_start (1 samples, 0.41%)_dl_sysdep_start (1 samples, 0.41%)dl_main (1 samples, 0.41%)_dl_lookup_symbol_x (1 samples, 0.41%) \ No newline at end of file diff --git a/profiling/massif.out.520307 b/profiling/massif.out.520307 new file mode 100644 index 0000000..e4c07fd --- /dev/null +++ b/profiling/massif.out.520307 @@ -0,0 +1,567 @@ +desc: (none) +cmd: ./shuffle3-release small-u +time_unit: i +#----------- +snapshot=0 +#----------- +time=0 +mem_heap_B=0 +mem_heap_extra_B=0 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=1 +#----------- +time=4048133 +mem_heap_B=32816 +mem_heap_extra_B=8 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=2 +#----------- +time=4050820 +mem_heap_B=8 +mem_heap_extra_B=16 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=3 +#----------- +time=4057134 +mem_heap_B=72712 +mem_heap_extra_B=24 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=4 +#----------- +time=4282565 +mem_heap_B=73736 +mem_heap_extra_B=32 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=5 +#----------- +time=4289663 +mem_heap_B=74248 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=6 +#----------- +time=4295729 +mem_heap_B=75784 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=7 +#----------- +time=4303612 +mem_heap_B=77832 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=8 +#----------- +time=4318766 +mem_heap_B=86024 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=9 +#----------- +time=4322930 +mem_heap_B=81928 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=10 +#----------- +time=4353188 +mem_heap_B=98312 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=11 +#----------- +time=4361448 +mem_heap_B=90120 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=12 +#----------- +time=4421914 +mem_heap_B=122888 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=13 +#----------- +time=4438366 +mem_heap_B=122888 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=detailed +n3: 122888 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 72704 0x493F45A: pool (eh_alloc.cc:123) + n1: 72704 0x493F45A: __static_initialization_and_destruction_0 (eh_alloc.cc:262) + n1: 72704 0x493F45A: _GLOBAL__sub_I_eh_alloc.cc (eh_alloc.cc:338) + n1: 72704 0x40112DD: call_init.part.0 (in /usr/lib/ld-2.32.so) + n1: 72704 0x40113C7: _dl_init (in /usr/lib/ld-2.32.so) + n1: 72704 0x40020C9: ??? (in /usr/lib/ld-2.32.so) + n1: 72704 0x1: ??? + n1: 72704 0x1FFF000AC6: ??? + n0: 72704 0x1FFF000AD9: ??? + n1: 49152 0x10A384: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n1: 49152 0x109385: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n0: 49152 0x4C6A151: (below main) (in /usr/lib/libc-2.32.so) + n0: 1032 in 3 places, all below massif's threshold (1.00%) +#----------- +snapshot=14 +#----------- +time=4438366 +mem_heap_B=106504 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=15 +#----------- +time=4559248 +mem_heap_B=172040 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=16 +#----------- +time=4592084 +mem_heap_B=172040 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=detailed +n3: 172040 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 98304 0x10A384: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n1: 98304 0x109385: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n0: 98304 0x4C6A151: (below main) (in /usr/lib/libc-2.32.so) + n1: 72704 0x493F45A: pool (eh_alloc.cc:123) + n1: 72704 0x493F45A: __static_initialization_and_destruction_0 (eh_alloc.cc:262) + n1: 72704 0x493F45A: _GLOBAL__sub_I_eh_alloc.cc (eh_alloc.cc:338) + n1: 72704 0x40112DD: call_init.part.0 (in /usr/lib/ld-2.32.so) + n1: 72704 0x40113C7: _dl_init (in /usr/lib/ld-2.32.so) + n1: 72704 0x40020C9: ??? (in /usr/lib/ld-2.32.so) + n1: 72704 0x1: ??? + n1: 72704 0x1FFF000AC6: ??? + n0: 72704 0x1FFF000AD9: ??? + n0: 1032 in 3 places, all below massif's threshold (1.00%) +#----------- +snapshot=17 +#----------- +time=4592084 +mem_heap_B=139272 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=18 +#----------- +time=4833798 +mem_heap_B=270344 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=19 +#----------- +time=4899402 +mem_heap_B=270344 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=detailed +n3: 270344 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 196608 0x10A384: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n1: 196608 0x109385: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n0: 196608 0x4C6A151: (below main) (in /usr/lib/libc-2.32.so) + n1: 72704 0x493F45A: pool (eh_alloc.cc:123) + n1: 72704 0x493F45A: __static_initialization_and_destruction_0 (eh_alloc.cc:262) + n1: 72704 0x493F45A: _GLOBAL__sub_I_eh_alloc.cc (eh_alloc.cc:338) + n1: 72704 0x40112DD: call_init.part.0 (in /usr/lib/ld-2.32.so) + n1: 72704 0x40113C7: _dl_init (in /usr/lib/ld-2.32.so) + n1: 72704 0x40020C9: ??? (in /usr/lib/ld-2.32.so) + n1: 72704 0x1: ??? + n1: 72704 0x1FFF000AC6: ??? + n0: 72704 0x1FFF000AD9: ??? + n0: 1032 in 3 places, all below massif's threshold (1.00%) +#----------- +snapshot=20 +#----------- +time=4899402 +mem_heap_B=204808 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=21 +#----------- +time=5382780 +mem_heap_B=466952 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=22 +#----------- +time=5513920 +mem_heap_B=466952 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=peak +n3: 466952 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 393216 0x10A384: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n1: 393216 0x109385: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n0: 393216 0x4C6A151: (below main) (in /usr/lib/libc-2.32.so) + n1: 72704 0x493F45A: pool (eh_alloc.cc:123) + n1: 72704 0x493F45A: __static_initialization_and_destruction_0 (eh_alloc.cc:262) + n1: 72704 0x493F45A: _GLOBAL__sub_I_eh_alloc.cc (eh_alloc.cc:338) + n1: 72704 0x40112DD: call_init.part.0 (in /usr/lib/ld-2.32.so) + n1: 72704 0x40113C7: _dl_init (in /usr/lib/ld-2.32.so) + n1: 72704 0x40020C9: ??? (in /usr/lib/ld-2.32.so) + n1: 72704 0x1: ??? + n1: 72704 0x1FFF000AC6: ??? + n0: 72704 0x1FFF000AD9: ??? + n0: 1032 in 3 places, all below massif's threshold (1.00%) +#----------- +snapshot=23 +#----------- +time=5513920 +mem_heap_B=335880 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=24 +#----------- +time=5892087 +mem_heap_B=73736 +mem_heap_extra_B=32 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=25 +#----------- +time=5989421 +mem_heap_B=73744 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=26 +#----------- +time=5996279 +mem_heap_B=73992 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=27 +#----------- +time=6002698 +mem_heap_B=74248 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=28 +#----------- +time=6015289 +mem_heap_B=75272 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=29 +#----------- +time=6015414 +mem_heap_B=74760 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=30 +#----------- +time=6040651 +mem_heap_B=76808 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=31 +#----------- +time=6040828 +mem_heap_B=75784 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=32 +#----------- +time=6091310 +mem_heap_B=79880 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=detailed +n4: 79880 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 72704 0x493F45A: pool (eh_alloc.cc:123) + n1: 72704 0x493F45A: __static_initialization_and_destruction_0 (eh_alloc.cc:262) + n1: 72704 0x493F45A: _GLOBAL__sub_I_eh_alloc.cc (eh_alloc.cc:338) + n1: 72704 0x40112DD: call_init.part.0 (in /usr/lib/ld-2.32.so) + n1: 72704 0x40113C7: _dl_init (in /usr/lib/ld-2.32.so) + n1: 72704 0x40020C9: ??? (in /usr/lib/ld-2.32.so) + n1: 72704 0x1: ??? + n1: 72704 0x1FFF000AC6: ??? + n0: 72704 0x1FFF000AD9: ??? + n2: 6144 0x10A384: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n1: 6144 0x1095C2: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n0: 6144 0x4C6A151: (below main) (in /usr/lib/libc-2.32.so) + n0: 0 in 1 place, below massif's threshold (1.00%) + n1: 1024 0x4CB6E03: _IO_file_doallocate (in /usr/lib/libc-2.32.so) + n1: 1024 0x4CC570F: _IO_doallocbuf (in /usr/lib/libc-2.32.so) + n1: 1024 0x4CC48A7: _IO_file_overflow@@GLIBC_2.2.5 (in /usr/lib/libc-2.32.so) + n1: 1024 0x4CC3955: _IO_file_xsputn@@GLIBC_2.2.5 (in /usr/lib/libc-2.32.so) + n1: 1024 0x4CB8330: fwrite (in /usr/lib/libc-2.32.so) + n1: 1024 0x4877FD7: fmt::v7::vprint(_IO_FILE*, fmt::v7::basic_string_view, fmt::v7::format_args) (in /usr/lib/libfmt.so.7.1.2) + n1: 1024 0x10A258: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n1: 1024 0x10933E: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n0: 1024 0x4C6A151: (below main) (in /usr/lib/libc-2.32.so) + n0: 8 in 2 places, all below massif's threshold (1.00%) +#----------- +snapshot=33 +#----------- +time=6091591 +mem_heap_B=77832 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=34 +#----------- +time=6192490 +mem_heap_B=86024 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=35 +#----------- +time=6196654 +mem_heap_B=81928 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=36 +#----------- +time=6398233 +mem_heap_B=98312 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=37 +#----------- +time=6406493 +mem_heap_B=90120 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=38 +#----------- +time=6809904 +mem_heap_B=122888 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=39 +#----------- +time=6826356 +mem_heap_B=106504 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=40 +#----------- +time=7633039 +mem_heap_B=172040 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=41 +#----------- +time=7665875 +mem_heap_B=139272 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=42 +#----------- +time=7951930 +mem_heap_B=73736 +mem_heap_extra_B=32 +mem_stacks_B=0 +heap_tree=detailed +n3: 73736 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 72704 0x493F45A: pool (eh_alloc.cc:123) + n1: 72704 0x493F45A: __static_initialization_and_destruction_0 (eh_alloc.cc:262) + n1: 72704 0x493F45A: _GLOBAL__sub_I_eh_alloc.cc (eh_alloc.cc:338) + n1: 72704 0x40112DD: call_init.part.0 (in /usr/lib/ld-2.32.so) + n1: 72704 0x40113C7: _dl_init (in /usr/lib/ld-2.32.so) + n1: 72704 0x40020C9: ??? (in /usr/lib/ld-2.32.so) + n1: 72704 0x1: ??? + n1: 72704 0x1FFF000AC6: ??? + n0: 72704 0x1FFF000AD9: ??? + n1: 1024 0x4CB6E03: _IO_file_doallocate (in /usr/lib/libc-2.32.so) + n1: 1024 0x4CC570F: _IO_doallocbuf (in /usr/lib/libc-2.32.so) + n1: 1024 0x4CC48A7: _IO_file_overflow@@GLIBC_2.2.5 (in /usr/lib/libc-2.32.so) + n1: 1024 0x4CC3955: _IO_file_xsputn@@GLIBC_2.2.5 (in /usr/lib/libc-2.32.so) + n1: 1024 0x4CB8330: fwrite (in /usr/lib/libc-2.32.so) + n1: 1024 0x4877FD7: fmt::v7::vprint(_IO_FILE*, fmt::v7::basic_string_view, fmt::v7::format_args) (in /usr/lib/libfmt.so.7.1.2) + n1: 1024 0x10A258: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n1: 1024 0x10933E: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n0: 1024 0x4C6A151: (below main) (in /usr/lib/libc-2.32.so) + n0: 8 in 3 places, all below massif's threshold (1.00%) +#----------- +snapshot=43 +#----------- +time=7971885 +mem_heap_B=73744 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=44 +#----------- +time=7979276 +mem_heap_B=75784 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=45 +#----------- +time=7985879 +mem_heap_B=77832 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=46 +#----------- +time=7998473 +mem_heap_B=86024 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=detailed +n4: 86024 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 72704 0x493F45A: pool (eh_alloc.cc:123) + n1: 72704 0x493F45A: __static_initialization_and_destruction_0 (eh_alloc.cc:262) + n1: 72704 0x493F45A: _GLOBAL__sub_I_eh_alloc.cc (eh_alloc.cc:338) + n1: 72704 0x40112DD: call_init.part.0 (in /usr/lib/ld-2.32.so) + n1: 72704 0x40113C7: _dl_init (in /usr/lib/ld-2.32.so) + n1: 72704 0x40020C9: ??? (in /usr/lib/ld-2.32.so) + n1: 72704 0x1: ??? + n1: 72704 0x1FFF000AC6: ??? + n0: 72704 0x1FFF000AD9: ??? + n2: 12288 0x10A384: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n1: 12288 0x10973E: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n0: 12288 0x4C6A151: (below main) (in /usr/lib/libc-2.32.so) + n0: 0 in 2 places, all below massif's threshold (1.00%) + n1: 1024 0x4CB6E03: _IO_file_doallocate (in /usr/lib/libc-2.32.so) + n1: 1024 0x4CC570F: _IO_doallocbuf (in /usr/lib/libc-2.32.so) + n1: 1024 0x4CC48A7: _IO_file_overflow@@GLIBC_2.2.5 (in /usr/lib/libc-2.32.so) + n1: 1024 0x4CC3955: _IO_file_xsputn@@GLIBC_2.2.5 (in /usr/lib/libc-2.32.so) + n1: 1024 0x4CB8330: fwrite (in /usr/lib/libc-2.32.so) + n1: 1024 0x4877FD7: fmt::v7::vprint(_IO_FILE*, fmt::v7::basic_string_view, fmt::v7::format_args) (in /usr/lib/libfmt.so.7.1.2) + n1: 1024 0x10A258: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n1: 1024 0x10933E: ??? (in /home/avril/work/shuffle3/lean/shuffle3-release) + n0: 1024 0x4C6A151: (below main) (in /usr/lib/libc-2.32.so) + n0: 8 in 2 places, all below massif's threshold (1.00%) +#----------- +snapshot=47 +#----------- +time=8002637 +mem_heap_B=81928 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=48 +#----------- +time=8027775 +mem_heap_B=98312 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=49 +#----------- +time=8036035 +mem_heap_B=90120 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=50 +#----------- +time=8086261 +mem_heap_B=122888 +mem_heap_extra_B=48 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=51 +#----------- +time=8102713 +mem_heap_B=106504 +mem_heap_extra_B=40 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=52 +#----------- +time=8147526 +mem_heap_B=73736 +mem_heap_extra_B=32 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=53 +#----------- +time=8156172 +mem_heap_B=1032 +mem_heap_extra_B=24 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=54 +#----------- +time=8157131 +mem_heap_B=8 +mem_heap_extra_B=16 +mem_stacks_B=0 +heap_tree=empty diff --git a/profiling/mem-small.png b/profiling/mem-small.png new file mode 100644 index 0000000000000000000000000000000000000000..982bfa1334312754b363f482c6f6400bb4644398 GIT binary patch literal 4224 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 LW^Gymo{#zmAkfvS literal 0 HcmV?d00001 diff --git a/profiling/mem.png b/profiling/mem.png new file mode 100644 index 0000000000000000000000000000000000000000..fb01a2b5d06ce6bff8e0bd691b2ec53262554eaf GIT binary patch literal 3243 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 JDi3~{`VYmn_#OZN literal 0 HcmV?d00001 diff --git a/profiling/old-mem-smallu.png b/profiling/old-mem-smallu.png new file mode 100644 index 0000000000000000000000000000000000000000..7043e14d88f16fcb1b23df6186e5e61c98711f1d GIT binary patch literal 4240 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 literal 0 HcmV?d00001 diff --git a/profiling/old-mem.png b/profiling/old-mem.png new file mode 100644 index 0000000000000000000000000000000000000000..4fd2389b27003b64584db9aa20110f8aa7908dad GIT binary patch literal 3048 zcmds3dsNcd7N#t;L@9I3M@4T=DftEoj z+71d|3vJh$R>k|B@CSYM{%4|ASr?1JUIKv(TUYw3%r6WrKp_1XPj^&6;$5lGAUYQV z`YJ4d>-<2m`n*u*^aaCjt7bJ7Y)GgD)K#bCKx3IGJNnK+!>x<9kR@@A71EROk9LoS z%T=5r&shz1@QQFt;U@!xdkOv~)A{F#)eqG!g95 zFMT^mYU5;`3O3H}+vWFNtgz0&kx}9Ij@1#bDUB!>!{M`}NXMp^(+*Hki_$n67Du?*m`?gPBU;f?}&X9q<8UO2F_7xY-UU z_GC{L%AAI0K#VQ~WFA0f?{q@B0qyYmdqj+XfZ*W)By+65WlJ@L;klbHA6#1kVWcHM z!v2r4WRilb7-lZmVUqrI0J-?77VPxI4=7$vNHbvMqC!oe*i%q!>PKsR;-Bg6n_A(w zt;-QVkobtdN7&5{{jxI!Yd8XNx;o#hjkKZQTvqpGvfLOjtFST?@!!FcS*#uhRN*gU1!8r(Fuhpm; z;SwKr?GYW~Nth{_5WE1U0r}#gAETWU44zf!+kSfKxw+MhA@T!;`)0}! z^<)yC&_MUvqTO~l%o4^ zPBON9==0K_bb>CL(C|k2R@Q=IOrk!ta0RZX4AHp>uQvjDRy<^f#-Z8bZng;vli2kr z7(KXqCCk0zJf13T=AAap`ZFcmKPC_SkBQA91(&NOnR~PV4+21O07pU?&uY+tcyj-gTX~Cor*eG}s#qaPuQ&&osbks& z`}ye_$I&TMeEU+aj0~|oxBOz^5cu}vWg;a{in0kgxL!y-gdz83FT?|7B3AHj+N1yA zymO?ek%*e+xPX`_wSS#>`Dw-3C;zM!6`d)+Ue@1GM2Z`un%=+vLgGzP_06cvS5D`- z0^VHXsQ>#HBD>s}2-?^%{}BuVcl!|vt5j}ri#d zoEh_A1(lsA&SKgq9css2>yU%dbtfo2-Ig*BSI*6hy=rCrRQghB4`JR_^Ef0J==4hE zB+*Url%7+%*gQm-Zv|vFzULHJY$EUUy2gnee6uo_4c>L@^JXD44A|xmT%0bvPJRDP zvFOW&59(R4tD5&=mP+KjvALt{s^5xh@_I#zN;39i25x3uN)!z_MY1nHdK zc4^1ej0hfGk8OLLhdRQ%nsK7Ad&1ENeS=SS{rM%5@^UNN?Ur(CHT|uw(>$*~scs?+ zFV)qsSV;+zVMf9A4VP!%THfR+V_}Nfc-W0W?yx$PoP1c6blAZ1QUs>uNguiHg?fHs ziB~dtqgJ~vEMq!ELYreMv=sk(nA@`_cCw4ib^3w+dRlsHLu>n=CTg7jNT@zakaBqQYtYC>r zhYK^7q*ULxP;794g1UUkJ|Dr&?g}fbPp+QaEPo?kbzKz_F2ya(Ec|U5`qYP%=kS@Q RxAs2{^7J_2UhWo}@(aKQBq;y@ literal 0 HcmV?d00001 diff --git a/profiling/release-flame-old.svg b/profiling/release-flame-old.svg new file mode 100644 index 0000000..e6586b8 --- /dev/null +++ b/profiling/release-flame-old.svg @@ -0,0 +1,419 @@ +Flame Graph Reset ZoomSearch _IO_file_xsgetn (20 samples, 0.22%)_IO_new_file_xsputn (12 samples, 0.13%)__GI__IO_file_seekoff (156 samples, 1.70%)__GI__IO_fread (37 samples, 0.40%)__GI__IO_free_backup_area (25 samples, 0.27%)__GI__IO_fwrite (66 samples, 0.72%)__GI__IO_sgetn (30 samples, 0.33%)__GI__IO_switch_to_get_mode (21 samples, 0.23%)__GI___libc_free (24 samples, 0.26%)__GI___libc_malloc (11 samples, 0.12%)__GI_fseek (34 samples, 0.37%)__lseek64 (74 samples, 0.81%)_ar_file_get (16 samples, 0.17%)_ar_file_set (21 samples, 0.23%)_int_free (46 samples, 0.50%)new_do_write (29 samples, 0.32%)[[heap]] (651 samples, 7.09%)[[heap]]_ar_file_get (12 samples, 0.13%)_ar_file_set (19 samples, 0.21%)[[stack]] (70 samples, 0.76%)shuffle3 (27 samples, 0.29%)_IO_file_xsgetn (42 samples, 0.46%)_IO_seekoff_unlocked (20 samples, 0.22%)[anon] (70 samples, 0.76%)_IO_new_file_xsputn (45 samples, 0.49%)[libc-2.32.so] (91 samples, 0.99%)__GI__IO_file_seekoff (38 samples, 0.41%)_IO_new_file_write (33 samples, 0.36%)_IO_seekoff_unlocked (12 samples, 0.13%)__GI__IO_default_xsputn (28 samples, 0.31%)__GI__IO_file_overflow (33 samples, 0.36%)__GI__IO_free_backup_area (12 samples, 0.13%)__GI__IO_switch_to_get_mode (16 samples, 0.17%)__GI___libc_malloc (14 samples, 0.15%)__GI___libc_write (72 samples, 0.78%)__GI___read (149 samples, 1.62%)__GI_fseek (64 samples, 0.70%)__lseek64 (151 samples, 1.65%)__random (10 samples, 0.11%)_ar_file_get (25 samples, 0.27%)_ar_file_set (12 samples, 0.13%)new_do_write (151 samples, 1.65%)[unknown] (811 samples, 8.84%)[unknown]_IO_seekoff_unlocked (12 samples, 0.13%)__GI__IO_file_seekoff (19 samples, 0.21%)rand (86 samples, 0.94%)__random (85 samples, 0.93%)__random_r (62 samples, 0.68%)_next (160 samples, 1.74%)_sample (20 samples, 0.22%)[libm-2.32.so] (202 samples, 2.20%)[.._sample.lto_priv.0 (259 samples, 2.82%)_s..__GI__IO_default_xsputn (125 samples, 1.36%)__GI__IO_fwrite (752 samples, 8.19%)__GI__IO_fw.._IO_new_file_xsputn (572 samples, 6.23%)_IO_new_..__GI__IO_file_overflow (77 samples, 0.84%)__memmove_avx_unaligned_erms (20 samples, 0.22%)_IO_file_xsgetn (91 samples, 0.99%)__memmove_avx_unaligned_erms (29 samples, 0.32%)__GI__IO_fread (270 samples, 2.94%)__..__GI__IO_sgetn (37 samples, 0.40%)__GI___libc_free (151 samples, 1.65%)__GI___libc_malloc (65 samples, 0.71%)_IO_seekoff_unlocked (35 samples, 0.38%)__GI__IO_file_read (20 samples, 0.22%)__GI__IO_file_seek (12 samples, 0.13%)[libc-2.32.so] (30 samples, 0.33%)__GI__IO_free_backup_area (128 samples, 1.39%)__GI___libc_free (87 samples, 0.95%)_IO_new_file_write (285 samples, 3.10%)_IO..__GI___libc_write (179 samples, 1.95%)_.._IO_new_do_write (541 samples, 5.89%)_IO_new..new_do_write (530 samples, 5.77%)new_do_..__lseek64 (149 samples, 1.62%)__GI__IO_switch_to_get_mode (591 samples, 6.44%)__GI__IO..__GI__IO_file_overflow (12 samples, 0.13%)__GI___read (371 samples, 4.04%)__GI..__GI_fseek (2,112 samples, 23.01%)__GI_fseek__GI__IO_file_seekoff (1,935 samples, 21.08%)__GI__IO_file_seekoff__lseek64 (377 samples, 4.11%)__ls.._init (74 samples, 0.81%)_int_free (115 samples, 1.25%)fseek@plt (10 samples, 0.11%)_ar_file_get (2,954 samples, 32.18%)_ar_file_getmalloc@plt (10 samples, 0.11%)_IO_seekoff_unlocked (47 samples, 0.51%)__GI__IO_file_read (10 samples, 0.11%)[libc-2.32.so] (21 samples, 0.23%)__GI__IO_free_backup_area (114 samples, 1.24%)__GI___libc_free (82 samples, 0.89%)_IO_new_file_write (287 samples, 3.13%)_IO..__GI___libc_write (174 samples, 1.90%)_.._IO_new_do_write (571 samples, 6.22%)_IO_new_..new_do_write (562 samples, 6.12%)new_do_w..__lseek64 (190 samples, 2.07%)_..__GI__IO_switch_to_get_mode (608 samples, 6.62%)__GI__IO_..__GI__IO_file_overflow (14 samples, 0.15%)__GI___read (377 samples, 4.11%)__GI..__GI_fseek (2,180 samples, 23.75%)__GI_fseek__GI__IO_file_seekoff (1,969 samples, 21.45%)__GI__IO_file_seekoff__lseek64 (373 samples, 4.06%)__ls.._ar_file_set (2,290 samples, 24.95%)_ar_file_setfwrite@plt (43 samples, 0.47%)ar_swap (6,127 samples, 66.75%)ar_swap_IO_file_xsgetn (16 samples, 0.17%)__GI__IO_fread (36 samples, 0.39%)__GI_fseek (120 samples, 1.31%)__GI__IO_file_seekoff (80 samples, 0.87%)__lseek64 (44 samples, 0.48%)_int_free (14 samples, 0.15%)minmax_floats (201 samples, 2.19%)m.._ar_file_get (197 samples, 2.15%)_..__GI__IO_fread (10 samples, 0.11%)__GI_fseek (31 samples, 0.34%)__GI__IO_file_seekoff (19 samples, 0.21%)__lseek64 (12 samples, 0.13%)minmax_int64_ts (58 samples, 0.63%)_ar_file_get (58 samples, 0.63%)_IO_file_xsgetn (33 samples, 0.36%)__GI__IO_fread (86 samples, 0.94%)__GI__IO_sgetn (11 samples, 0.12%)__GI___libc_free (15 samples, 0.16%)__GI___libc_malloc (14 samples, 0.15%)_IO_seekoff_unlocked (17 samples, 0.19%)[libc-2.32.so] (10 samples, 0.11%)__GI__IO_free_backup_area (19 samples, 0.21%)__GI_fseek (338 samples, 3.68%)__GI..__GI__IO_file_seekoff (230 samples, 2.51%)__..__lseek64 (129 samples, 1.41%)_int_free (36 samples, 0.39%)__libc_start_main (7,433 samples, 80.98%)__libc_start_mainmain (7,433 samples, 80.98%)mainshuffle3 (7,433 samples, 80.98%)shuffle3minmax_sbytes (525 samples, 5.72%)minmax_.._ar_file_get (514 samples, 5.60%)_ar_fil.._start (7,438 samples, 81.03%)_startall (9,179 samples, 100%)shuffle3-releas (9,179 samples, 100.00%)shuffle3-releas \ No newline at end of file diff --git a/profiling/release-flame.svg b/profiling/release-flame.svg new file mode 100644 index 0000000..cdf9049 --- /dev/null +++ b/profiling/release-flame.svg @@ -0,0 +1,419 @@ +Flame Graph Reset ZoomSearch [libm-2.32.so] (9 samples, 26.47%)[libm-2.32.so]__libc_start_main (29 samples, 85.29%)__libc_start_mainmain (29 samples, 85.29%)mainrand_r (4 samples, 11.76%)rand_rall (34 samples, 100%)shuffle3-releas (34 samples, 100.00%)shuffle3-releas_start (34 samples, 100.00%)_start_dl_start (1 samples, 2.94%)_d.._dl_sysdep_start (1 samples, 2.94%)_d..dl_main (1 samples, 2.94%)dl.._dl_lookup_symbol_x (1 samples, 2.94%)_d.. \ No newline at end of file diff --git a/profiling/release-flameu.svg b/profiling/release-flameu.svg new file mode 100644 index 0000000..39a6ea5 --- /dev/null +++ b/profiling/release-flameu.svg @@ -0,0 +1,419 @@ +Flame Graph Reset ZoomSearch VTT for std::basic_ostream<wchar_t, std::char_traits<wchar_t> > (1 samples, 1.89%)V..std::vector<unsigned long, std::allocator<unsigned long> >::emplace_back<unsigned long> (1 samples, 1.89%)s..[libm-2.32.so] (1 samples, 1.89%)[..main (1 samples, 1.89%)m..[unknown] (4 samples, 7.55%)[unknown]std::vector<unsigned long, std::allocator<unsigned long> >::emplace_back<unsigned long> (2 samples, 3.77%)std:..[libm-2.32.so] (23 samples, 43.40%)[libm-2.32.so]std::vector<unsigned long, std::allocator<unsigned long> >::emplace_back<unsigned long> (4 samples, 7.55%)std::vecto..__memmove_avx_unaligned_erms (1 samples, 1.89%)_..__libc_start_main (43 samples, 81.13%)__libc_start_mainmain (43 samples, 81.13%)mainstd::vector<unsigned long, std::allocator<unsigned long> >::vector (1 samples, 1.89%)s..__memset_avx2_erms (1 samples, 1.89%)_..all (53 samples, 100%)shuffle3-releas (53 samples, 100.00%)shuffle3-releas_start (48 samples, 90.57%)_start_dl_start (1 samples, 1.89%)_.._dl_sysdep_start (1 samples, 1.89%)_..dl_main (1 samples, 1.89%)d.._dl_init_paths (1 samples, 1.89%)_..fillin_rpath.isra.0 (1 samples, 1.89%)f..__strsep (1 samples, 1.89%)_.. \ No newline at end of file