Changes

Jump to: navigation, search

BETTERRED

17,161 bytes added, 20:30, 12 April 2017
Code
The program can then be executed by running the compiled binary and it will display the time it took to generate the Mandelbrot set and save the pictures.
{| class="wikitable mw-collapsible mw-collapsed"! Mandelbrot CPU( ... )|-|<syntaxhighlight lang== Observations ==="cpp">#include <iostream>#include <complex>#include <vector>#include <chrono>#include <functional>
The program takes a significant amount of time to run as the calculations are being done on the CPU#include "window. There are nested loops present within the program that can be parallelized to make the program fasterh"#include "save_image.h"#include "utils.h"
The code also has the size of the image and the iterations hard// clang++ -coded which can be modified to make the program significantly longer to process and make it tough on the GPU's for benchmarking and stability testing by running the process in a loopstd=c++11 -stdlib=libc++ -O3 save_image.cpp utils. The code is relatively straight forward and the parallelization should also be easy to implement and testcpp mandel.cpp -lfreeimage
// Use an alias to simplify the use of complex type
using Complex = std::complex<float>;
=== Hotspot ===// Convert a pixel coordinate to the complex domainComplex scale(window<int> &scr, window<float> &fr, Complex c) { Complex aux(c.real() / (float)scr.width() * fr.width() + fr.x_min(), c.imag() / (float)scr.height() * fr.height() + fr.y_min()); return aux;}
Hotspot for // Check if a point is in the program was found in set or escapes to infinity, return the fractalnumber if iterationsint escape() Complex c, int iter_max, const std::function which calls the get_iterations<Complex(Complex, Complex) function that contains 2-nested for loops and a call to escape(> &func) which contains a while loop. Profiling the runtime with Instruments on OSX displayed that the fractal{ Complex z(0) function took up the most amount of runtime and this is the function that will be parallelized using CUDA. Once the function is parallelized, the iterations and size of the image can be increased in order to make the computation relatively stressful on the GPU to get a benchmark or looped in order to do stress testing for GPUs.; int iter = 0;
while (abs(z) < 2.0 && iter < iter_max) {
z = func(z, c);
iter++;
}
return iter;
}
// Loop over each pixel from our image and check if the points associated with this pixel escape to infinityvoid get_number_iterations(window<int> &scr, window<float> &fract, int iter_max, std::vector<int> &colors, const std::function<Complex( Complex, Complex)> &func) { int k =0, progress =-1; for(int i = Profiling Data Screenshots scr.y_min(); i < scr.y_max(); ++i) { for(int j =scr.x_min(); j < scr.x_max(); ++j) { Complex c((float)j, (float)i); c =scale(scr, fract, c); colors[k] =escape(c, iter_max, func); k++; } if(progress < (int)(i*100.0/scr.y_max())){ progress = (int)(i*100.0/scr.y_max()); std::cout << progress << "%\n"; } }}
Profile void fractal(window<int> &scr, window<float> &fract, int iter_max, std::vector<int> &colors, const std::function<Complex( Complex, Complex)> &func, const char *fname, bool smooth_color) { auto start = std::chrono::steady_clock::now(); get_number_iterations(scr, fract, iter_max, colors, func); auto end = std::chrono::steady_clock::now(); std::cout << "Time to generate " << fname << " = " << std::chrono::duration <float, std::milli> (end - start).count() << " [httpsms]" << std:://drive.google.com/open?id=0B2Y_atB3DptbUG5oRWMyUGNQdlU Profile]endl;
Hotspot Code - [https: //drive.google.com/open?id=0B2Y_atB3DptbRlhCUTNyeEFDbEk Hotspot Code]Save (show) the result as an image plot(scr, colors, iter_max, fname, smooth_color);}
void mandelbrot() { // Define the size of the image window<int> scr(0, 1000, 0, 1000); // The domain in which we test for points window<float> fract(-2.2, 1.2, ---1.7, 1.7);
== Introduction : GPU Benchmarking //Testing for NBody : Joshua Kraitberg =The function used to calculate the fractal auto func =[] (Complex z, Complex c) -> Complex {return z * z + c; };
This program uses Newtonian mechanics and a four-order symplectic Candy-Rozmus integration int iter_max = 500; const char *fname = "mandelbrot.png"; bool smooth_color = true; std::vector<int> colors(a symplectic algorithm guarantees exact conservation of energy and angular momentum)scr. The initial conditions are obtained from JPL Horizons, ahd constants size(like masses, gravitational constant) are those recommended by the International Astronomical Union. The program currently does not take into account effects like general relativity, the non-spherical shapes of celestial objects, tidal effects on Earth, etc. It also does not take the 500 asteroids used by JPL Horizons into accound in its model of the Solar System.);
[https: //githubExperimental zoom (bugs ?).comThis will modify the fract window (the domain in which we calculate the fractal function) /fding/nbody Source]zoom(1.0, -1.225, -1.22, 0.15, 0.16, fract); //Z2 fractal(scr, fract, iter_max, colors, func, fname, smooth_color);}
=== Compilation Instructions: ===void triple_mandelbrot() { // Define the size of the image window<int> scr(0, 2000, 0, 2000); // The domain in which we test for points window<float> fract(-1.5, 1.5, -1.5, 1.5);
For Unix /Linux based systems:/ The function used to calculate the fractal auto func = [] (Complex z, Complex c) -> Complex {return z * z * z + c; };
g++ - int iter_max = 500; const char *fname = "triple_mandelbrot.png"; bool smooth_color = true; std=c++11 c++::vector<int> colors(scr.size());  fractal(scr, fract, iter_max, colors, func, fname, smooth_color);} int main() {  mandelbrot(); // triple_mandelbrot();  return 0;} </nbody.cppsyntaxhighlight>|}
=== Observations ===
The program is quite fast for takes a significant amount of time to run as the calculations are being a single-threaded done on the CPU application. Almost all There are nested loops present within the CPU time program that can be parallelized to make the program faster. The code also has the size of the image and the iterations hard-coded which can be modified to make the program significantly longer to process and make it tough on the GPU's for benchmarking and stability testing by running the process in a loop. The code is spent manipulating data relatively straight forward and iterating in vectorsthe parallelization should also be easy to implement and test
=== Hotspot ===
Essentially all Hotspot for the time spent running is spent program was found in the doing calculation on vectors. The dowork fractal() function iteratively which calls the CRO_step get_iterations() function found in integratorsthat contains 2-nested for loops and a call to escape() which contains a while loop.h file. The CRO_step Profiling the runtime with Instruments on OSX displayed that the fractal() function is where took up the most amount of runtime and this is the vector calculations take placefunction that will be parallelized using CUDA. A large amount of is also done in Once the calculate_a function which is used parallelized, the iterations and size of the image can be increased in order to calulate make the acceleration computation relatively stressful on all the planetsGPU to get a benchmark or looped in order to do stress testing for GPUs.
=== Profiling Data and Screenshots ===
{| class="wikitable mw-collapsible mw-collapsed"! NBody Hot Functions|-| == Profiling Data Screenshots ===
<syntaxhighlight lang="cpp">void dowork(double t){ int numtimes=int(abs(tProfile - [https://dt)); dt=tdrive.google.com/double(numtimes+1); numtimes=numtimes+1; for (int iopen?id=0;i<numtimes;i++){ CRO_step(dt,a); }} 0B2Y_atB3DptbUG5oRWMyUGNQdlU Profile]
void CRO_step(register double mydt,void (*a)()){ long double macr_a[4] = {0.5153528374311229364, Hotspot Code -0.085782019412973646,0.4415830236164665242, 0.1288461583653841854}; long double macr_b[4] = {0https://drive.1344961992774310892, -0google.2248198030794208058, 0.7563200005156682911, 0.3340036032863214255}; for (int i=0;i<4;i++){ a(); for (int jcom/open?id=0;j<ncobjects;j++){ cobjects[j0B2Y_atB3DptbRlhCUTNyeEFDbEk Hotspot Code]->v += cobjects[j]->a * mydt*macr_b[i]; cobjects[j]->pos += cobjects[j]->v * mydt*macr_a[i]; } } //We should really expand the loop for efficiency}
void calculate_a(){ for (int j1=0;j1<ncobjects;j1++){ cobjects[j1]->a=vect(0,0,0); } for (int j1=0; j1<ncobjects;j1++){ for (int j2=j1+1;j2<ncobjects;j2++){ double m1=cobjects[j1]->m; double m2=cobjects[j2]->m; vect dist=cobjects[j1]->pos-cobjects[j2]->pos; double magd=dist.mag(); vect base=dist*(1.0/(magd*magd*magd)); cobjects[j1]->a+=base*(-m2); cobjects[j2]->a+=base*m1; } }}</syntaxhighlight>
|}== Introduction : GPU Benchmarking/Testing for NBody : Joshua Kraitberg ==
{| class="wikitable mwThis program uses Newtonian mechanics and a four-order symplectic Candy-collapsible mwRozmus integration (a symplectic algorithm guarantees exact conservation of energy and angular momentum). The initial conditions are obtained from JPL Horizons, ahd constants (like masses, gravitational constant) are those recommended by the International Astronomical Union. The program currently does not take into account effects like general relativity, the non-collapsed"spherical shapes of celestial objects, tidal effects on Earth, etc. It also does not take the 500 asteroids used by JPL Horizons into accound in its model of the Solar System. [https://github.com/fding/nbody Source] === Compilation Instructions: ===! NBody Hot Spot Data|For Unix/Linux based systems:  g++ -std=c++11 c++/nbody.cpp | Call graph (explanation follows)=== Observations === The program is quite fast for being a single-threaded CPU application. Almost all the CPU time is spent manipulating data and iterating in vectors.
=== Hotspot ===
granularity: each sample hit covers 4 byte(s) for 0Essentially all the time spent running is spent in the doing calculation on vectors.16% The dowork function iteratively calls the CRO_step function found in integrators.h file. The CRO_step function is where most of the vector calculations take place. A large amount of 6is also done in the calculate_a function which is used to calulate the acceleration on all the planets.18 seconds === Profiling Data and Screenshots ===
index % time self children called name{| class="wikitable mw-collapsible mw-collapsed"! NBody Hot Functions|-|   <spontaneoussyntaxhighlight lang="cpp">[1] 99.7 0.00 6.16 main [1] 0.00 6.15 1/1 void dowork(doublet) [3]{ 0.00 0.01 1/1 totalL int numtimes=int() [14] 0.00 0.00 1/1 totalEabs() [16] 0.00 0.00 1t/1 initialize(dt) [17] 0.00 0.00 28/32712799 vect::operator-(vect const&) [8]; 0.00 0.00 14 dt=t/118268959 vect::operator*double(double const&numtimes+1) [5]; 0.00 0.00 14/5032775 vect::operator numtimes=(vect const&) [11]numtimes+1; 0.00 0.00 42/42 std::vector<int, std::allocator<int> >::operator[] for (unsigned int) [22] i=0.00 0.00 16/16 bool std::operator==;i<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*numtimes;i++) [33]{ 0.00 0.00 15/35 std::vector<int CRO_step(dt, std::allocator<int> >::size(a) const [23]; 0.00 0.00 14/14 std::vector<int, std::allocator<int> >::push_back(int const&) [39] } 0.00 0.00 14/14 getobj(int) [36]} 0.00 0.00 3/3 std::vector<double, std::allocator<double> >::operator[](unsigned int) [90] 0.00 0.00 2/2 print_hlinevoid CRO_step() [94] 0.00 0.00 2/10 std::vector<register doublemydt, std::allocator<double> >::sizevoid (*a) const [45] 0.00 0.00 1/1 std::ios_base::precision(int) [146]){ 0.00 0.00 1/1 std::vector< long double, std::allocator<double> >::vector() macr_a[1424] = {0.00 5153528374311229364, -0.00 1/1 std::vector<int085782019412973646, std::allocator<int> >::vector() [144] 0.00 4415830236164665242, 0.00 1/1 std::vector<1288461583653841854}; long double, std::allocator<double> >::push_back(double const&) macr_b[1414] = {0.00 1344961992774310892, -0.00 1/1 std::vector<std::string2248198030794208058, std::allocator<std::string> >::vector() [135] 0.00 7563200005156682911, 0.00 1/1 std::vector<std::string, std::allocator<std::string> >::~vector() [136]3340036032863214255}; 0.00 0.00 1/1 JD for (tm*) [103] 0.00 int i=0.00 1/1 std::vector;i<double, std::allocator<double> >::push_back(double&&4;i++) [140]{ 0.00 0.00 1/1 std::vector<int, std::allocator<int> >::~vector a() [145]; 0.00 for (int j=0.00 1/1 std::vector;j<double, std::allocator<double> >::~vector(ncobjects;j++) [143]-----------------------------------------------{ 0.14 6.01 89870/89870 dowork(double) cobjects[3j]->v += cobjects[2j] 99.6 0.14 6.01 89870 CRO_step(double, void (->a * mydt*)()) macr_b[2i]; 1.18 4.22 359480/359480 calculate_a() cobjects[4j] 0.20 0.29 20130880/118268959 vect::operator*(double const&) [5] 0.12 0.00 10065440/75490814 vect::operator->pos +=(vect const&) cobjects[7j]----------------------------------------------- 0.00 6.15 1/1 main >v * mydt*macr_a[1i]; [3] 99.6 0.00 6.15 1 dowork(double) [3] } 0.14 6.01 89870 } //89870 CRO_step(double, void (*)()) [2]We should really expand the loop for efficiency 0.00 0.00 1/1 std::abs(double) [147]} ----------------------------------------------- 1.18 4.22 359480/359480 CRO_step(double, void (*)()) [2][4] 87.5 1.18 4.22 359480 calculate_a() [4]{ 1.00 1.39 98138040/118268959 vect::operator* for (double const&) [5] int j1=0.78 0.00 65425360/75490814 vect::operator;j1<ncobjects;j1++=(vect const&) { cobjects[7j1] 0.26 0.37 32712680/32712799 vect::operator-(vect const&) [8] 0.32 0.00 32712680/32712785 vect::mag() [10] 0.08 0.00 5032720/5032775 >a=vect::operator=(vect const&) [11] 0.01 ,0.00 5032720/5032775 vect::vect(double, double, double0) [13];----------------------------------------------- } 0.00 0.00 11/118268959 initialize for () [17] int j1=0.00 0.00 14/118268959 main [1] 0.00 0.00 14/118268959 totalL(; j1<ncobjects;j1++) [14]{ 0.20 0.29 20130880/118268959 CRO_step for (double, void (*)()) [2] int j2=j1+1.00 1.39 98138040/118268959 calculate_a(;j2<ncobjects;j2++) [4]{[5] 46.5 1.20 1.67 118268959 vect::operator*( double const&) [5] 1.67 0.00 118268959/118268959 vect::operator*m1=(double const&) cobjects[6j1]----------------------------------------------->m; 1.67 0.00 118268959/118268959 vect::operator*( double const&) m2=cobjects[5j2]->m;[6] 27.1 1.67 0.00 118268959 vect::operator*dist=(double const&) cobjects[6j1]--------------------------------------->pos-------- 0.00 0.00 14/75490814 totalL() cobjects[14j2]->pos; 0.12 0.00 10065440/75490814 CRO_step( double, void (*)()) [2] 0magd=dist.78 0.00 65425360/75490814 calculate_amag() [4];[7] 14.6 0.91 0.00 75490814 vect::operator+base=dist*(vect const&) [7]----------------------------------------------- 0.00 0.00 28/32712799 main [1] 0.00 0.00 91/32712799 totalE(magd*magd*magd) [16] 0.26 0.37 32712680/32712799 calculate_a() [4]; cobjects[8j1] 10.4 0.27 0.38 32712799 vect::operator->a+=base*(vect const&-m2) ; cobjects[8j2] 0.38 0.00 32712799/32712799 vect::operator->a+=(vect const&) [9]base*m1; } }-----------------------------------------------} 0.38 0.00 32712799</32712799 vect::operator-(vect const&) [8]syntaxhighlight> |} [9] 6.1 0.38 0.00 32712799 vect::operator-{| class=(vect const&) [9]--------------------------------------------"wikitable mw-collapsible mw-collapsed"! NBody Hot Spot Data|- 0.00 0.00 105/32712785 totalE| Call graph (explanation follows) [16] 0.32 0.00 32712680/32712785 calculate_a() [4][10] 5.2 0.32 0.00 32712785 vectgranularity::mageach sample hit covers 4 byte(s) [10]----------------------------------------------- for 0.00 016% of 6.00 14/5032775 main [1]18 seconds  0.00 index % time 0.00 41/5032775 initialize() [17] 0.08 self children 0.00 5032720/5032775 called calculate_a() [4][11] 1.4 0.08 0.00 5032775 vect::operator=(vect const&) [11]-----------------------------------------------name
<spontaneous>
[12] 0.3 0.02 0.00 vect::operator+(vect const&) [12]----------------------------------------------- 0.00 0.00 14/5032775 cross(vect const&, vect const&) [15] 0.00 0.00 41/5032775 initialize() [17] 0.01 0.00 5032720/5032775 calculate_a() [4][13] 0.2 0.01 0.00 5032775 vect::vect(double, double, double) [13]----------------------------------------------- 0.00 0.01 1/1 main [1][14] 0.1 0.00 0.01 1 totalL() [14] 0.01 0.00 14/14 cross(vect const&, vect const&) [15] 0.00 0.00 14/118268959 vect::operator*(double const&) [5] 0.00 0.00 14/75490814 vect::operator+=(vect const&) [7] 0.00 0.00 1/85 vect::vect() [21]----------------------------------------------- 0.01 0.00 14/14 totalL() [14][15] 0.1 0.01 0.00 14 cross(vect const&, vect const&) [15] 0.00 0.00 14/5032775 vect::vect(double, double, double) [13]|}  {| class="wikitable mw-collapsible mw-collapsed"! NBody gprof Complete Data (Warning: long)|-| Call graph (explanation follows)  granularity: each sample hit covers 4 byte(s) for 0.16% of 6.18 seconds index % time self children called name <spontaneous>[1] 99.7 0.00 6.16 main [1] 0.00 6.15 1/1 dowork(double) [3] 0.00 0.01 1/1 totalL() [14]
0.00 0.00 1/1 totalE() [16]
0.00 0.00 1/1 initialize() [17]
[15] 0.1 0.01 0.00 14 cross(vect const&, vect const&) [15]
0.00 0.00 14/5032775 vect::vect(double, double, double) [13]
|}
 
{| class="wikitable mw-collapsible mw-collapsed"
! NBody gprof Complete Data (Warning: long)
|-
| Call graph (explanation follows)
 
 
granularity: each sample hit covers 4 byte(s) for 0.16% of 6.18 seconds
 
index % time self children called name
<spontaneous>
[1] 99.7 0.00 6.16 main [1]
0.00 6.15 1/1 dowork(double) [3]
0.00 0.01 1/1 totalL() [14]
0.00 0.00 1/1 totalE() [16]
0.00 0.00 1/1 initialize() [17]
0.00 0.00 28/32712799 vect::operator-(vect const&) [8]
0.00 0.00 14/118268959 vect::operator*(double const&) [5]
0.00 0.00 14/5032775 vect::operator=(vect const&) [11]
0.00 0.00 42/42 std::vector<int, std::allocator<int> >::operator[](unsigned int) [22]
0.00 0.00 16/16 bool std::operator==<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*) [33]
0.00 0.00 15/35 std::vector<int, std::allocator<int> >::size() const [23]
0.00 0.00 14/14 std::vector<int, std::allocator<int> >::push_back(int const&) [39]
0.00 0.00 14/14 getobj(int) [36]
0.00 0.00 3/3 std::vector<double, std::allocator<double> >::operator[](unsigned int) [90]
0.00 0.00 2/2 print_hline() [94]
0.00 0.00 2/10 std::vector<double, std::allocator<double> >::size() const [45]
0.00 0.00 1/1 std::ios_base::precision(int) [146]
0.00 0.00 1/1 std::vector<double, std::allocator<double> >::vector() [142]
0.00 0.00 1/1 std::vector<int, std::allocator<int> >::vector() [144]
0.00 0.00 1/1 std::vector<double, std::allocator<double> >::push_back(double const&) [141]
0.00 0.00 1/1 std::vector<std::string, std::allocator<std::string> >::vector() [135]
0.00 0.00 1/1 std::vector<std::string, std::allocator<std::string> >::~vector() [136]
0.00 0.00 1/1 JD(tm*) [103]
0.00 0.00 1/1 std::vector<double, std::allocator<double> >::push_back(double&&) [140]
0.00 0.00 1/1 std::vector<int, std::allocator<int> >::~vector() [145]
0.00 0.00 1/1 std::vector<double, std::allocator<double> >::~vector() [143]
-----------------------------------------------
0.00 14 06.00 101 89870/1 main [1][16] 0.0 0.00 0.00 89870 1 totalEdowork(double) [163] 0.00 0.00 91/32712799 vect::operator-(vect const&) [82] 0 99.00 6 0.00 105/32712785 vect::mag() [10] 0.00 14 06.00 14/14 __gnu_cxx::__promote_2<__gnu_cxx::__enable_if<01 89870 CRO_step(std::__is_arithmetic<double>::__value, void (*)&&(std::__is_arithmetic<int>::__value), double>::__type, int>::__type std::pow<double, int>(double, int) [402]----------------------------------------------- 01.00 18 04.00 122 359480/1 main [1][17] 0.0 0.00 0.00 1 initialize() [17] 0.00 0.00 359480 41/5032775 vect::operator=calculate_a(vect const&) [114] 0.00 20 0.00 1129 20130880/118268959 vect::operator*(double const&) [5] 0.00 12 0.00 4110065440/5032775 75490814 vect::vect(double, double, double) [13]----------------------------------------------- 0.00 0.00 1/85 totalLoperator+=() [14] 0.00 0.00 84/85 cobject::cobject() [37][21] 0.0 0.00 0.00 85 vect::vect() [21]----------------------------------------------- 0.00 0.00 42/42 main [1][22] 0.0 0.00 0.00 42 std::vector<int, std::allocator<int> >::operator[](unsigned int) [22]----------------------------------------------- 0.00 0.00 15/35 main [1] 0.00 0.00 20/35 std::vector<int, std::allocator<int> >::_M_check_len(unsigned int, char const*) const [71][23] 0.0 0.00 0.00 35 std::vector<int, std::allocator<int> >::size(&) const [237]
-----------------------------------------------
0.00 06.00 3015 1/30 std::_Niter_base<int*>::iterator_type std::__niter_base<int*>(int*) 1 main [251][243] 99.6 0.0 6.15 1 dowork(double) [3] 0.14 6.01 89870/89870 CRO_step(double, void (*)()) [2] 0.00 0.00 30 1/1 std::_Iter_base<int*, false>::_S_baseabs(int*double) [24147]
-----------------------------------------------
01.00 18 04.00 22 359480/359480 30/30 int* std::__copy_move_a2<trueCRO_step(double, intvoid (*, int*>)(int*, int*, int*)) [502][254] 087.5 1.18 4.22 359480 calculate_a() [4] 1.0 00 1.39 98138040/118268959 vect::operator*(double const&) [5] 0.00 78 0.00 30 std65425360/75490814 vect::_Niter_base<int*>operator+=(vect const&) [7] 0.26 0.37 32712680/32712799 vect::iterator_type stdoperator-(vect const&) [8] 0.32 0.00 32712680/32712785 vect::__niter_base<int*>mag(int*) [2510] 0.00 08 0.00 305032720/30 std5032775 vect::_Iter_base<int*, false>operator=(vect const&) [11] 0.01 0.00 5032720/5032775 vect::_S_basevect(int*double, double, double) [2413]
-----------------------------------------------
0.00 0.00 1011/20 void std::vector<int, std::allocator<int> >::_M_insert_aux<int const&>118268959 initialize(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&&&) [7317] 0.00 0.00 1014/118268959 main [1] 0.00 0.00 14/118268959 totalL() [14] 0.20 __gnu_cxx::__normal_iterator<int* 0.29 20130880/118268959 CRO_step(double, std::vector<int, std::allocator<int> > >::difference_type __gnu_cxx::operator-<intvoid (*, std::vector<int, std::allocator<int> > >)()) [2] 1.00 1.39 98138040/118268959 calculate_a(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > > const&, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > > const&) [704][265] 046.0 5 01.00 20 01.00 20 67 118268959 __gnu_cxxvect::__normal_iterator<intoperator*, std(double const&) [5] 1.67 0.00 118268959/118268959 vect::vector<int, std::allocator<int> > >::baseoperator*=(double const&) const [266]
-----------------------------------------------
01.00 67 0.00 20118268959/20 std:118268959 vect:_Iter_base<std::move_iterator<intoperator*>, true>::_S_base(std::move_iterator<int*>double const&) [285][276] 027.0 1 01.00 67 0.00 20 118268959 stdvect::move_iterator<intoperator*>::base=(double const&) const [276]
-----------------------------------------------
0.00 0.00 2014/20 std::_Miter_base<std::move_iterator<int*> >::iterator_type std::__miter_base<std::move_iterator<int*> >75490814 totalL(std::move_iterator<int*>) [3014][28] 0.0 12 0.00 10065440/75490814 CRO_step(double, void (*)()) [2] 0.78 0.00 20 std::_Iter_base<std::move_iterator<int*>, true>::_S_base65425360/75490814 calculate_a(std::move_iterator<int*>) [284] [7] 14.6 0.00 91 0.00 20/20 std::move_iterator<int*>75490814 vect::baseoperator+=(vect const&) const [277]
-----------------------------------------------
0.00 0.00 2028/20 std::move_iterator<int*> std::make_move_iterator<int*>32712799 main [1] 0.00 0.00 91/32712799 totalE() [16] 0.26 0.37 32712680/32712799 calculate_a(int* const&) [314][298] 010.0 4 0.00 27 0.00 20 38 32712799 stdvect::move_iterator<int*>operator-(vect const&) [8] 0.38 0.00 32712799/32712799 vect::move_iteratoroperator-=(int*vect const&) [299]
-----------------------------------------------
0.00 38 0.00 2032712799/20 int* std:32712799 vect:copy<std::move_iterator<int*>, int*>operator-(std::move_iterator<int*>, std::move_iterator<int*>, int*vect const&) [548][309] 0 6.0 1 0.00 38 0.00 20 32712799 std::_Miter_base<std::move_iterator<int*> >::iterator_type std:vect:__miter_base<std::move_iterator<int*> >operator-=(std::move_iterator<int*>) [30] 0.00 0.00 20/20 std::_Iter_base<std::move_iterator<int*>, true>::_S_base(std::move_iterator<int*>vect const&) [289]
-----------------------------------------------
0.00 0.00 20 105/20 int* std::__uninitialized_move_a<int*, int*, std::allocator<int> >32712785 totalE(int*, int*, int*, std::allocator<int>&) [5316][31] 0.0 32 0.00 0.00 20 std::move_iterator<int*> std::make_move_iterator<int*>32712680/32712785 calculate_a(int* const&) [314] [10] 5.2 0.00 32 0.00 20/20 std::move_iterator<int*>32712785 vect::move_iteratormag(int*) [2910]
-----------------------------------------------
0.00 0.00 14/5032775 main [1] 0.00 0.00 41/16 std::vector<int, std::allocator<int> >::~vector5032775 initialize() [14517] 0.00 08 0.00 155032720/16 void std::vector<int, std::allocator<int> >::_M_insert_aux<int const&>5032775 calculate_a(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&&&) [734][3211] 01.0 4 0.00 08 0.00 16 5032775 stdvect::_Vector_base<int, std::allocator<int> >::_M_get_Tp_allocatoroperator=(vect const&) [3211]
-----------------------------------------------
0.00 0.00 16/16 main [1] <spontaneous>[3312] 0.0 3 0.00 02 0.00 16 bool std vect::operator==<char, std::char_traits<char>, std::allocator<char> >+(std::basic_string<char, std::char_traits<char>, std::allocator<char> > vect const&, char const*) [3312]
-----------------------------------------------
0.00 0.00 1 14/16 __gnu_cxx::new_allocator<double>::construct5032775 cross(double*vect const&, double vect const&) [10815] 0.00 0.00 1 41/16 void __gnu_cxx::new_allocator<double>::construct<double>5032775 initialize(double*, double&&) [10917] 0.00 01 0.00 145032720/16 __gnu_cxx::new_allocator<int>::construct5032775 calculate_a(int*, int const&) [384][3413] 0.0 2 0.00 01 0.00 16 5032775 operator newvect::vect(unsigned intdouble, void*double, double) [3413]
-----------------------------------------------
0.00 0.01 1/1 main [1][14] 0.1 0.00 0.01 51 totalL() [14] 0.01 0.00 14/15 14 __gnu_cxx::new_allocator<int>::allocatecross(unsigned intvect const&, void vect const*&) [6915] 0.00 0.00 1014/15 std118268959 vect::vector<int, std::allocator<int> >::max_sizeoperator*(double const&) const [465][35] 0.0 0.00 14/75490814 vect::operator+=(vect const&) [7] 0.00 0.00 15 __gnu_cxx 1/85 vect::new_allocator<int>::max_sizevect() const [3521]
-----------------------------------------------
0.00 01 0.00 14/14 main totalL() [114][3615] 0.1 0 .01 0.00 14 cross(vect const&, vect const&) [15] 0.00 0.00 14 getobj/5032775 vect::vect(intdouble, double, double) [3613]
-----------------------------------------------
0.00 0.00 14 1/14 __static_initialization_and_destruction_0(int, int) 1 main [1051][3716] 0.0 0.00 0.00 1 totalE() [16] 0.00 0.00 14 cobject91/32712799 vect::operator-(vect const&) [8] 0.00 0.00 105/32712785 vect::cobjectmag() [3710] 0.00 0.00 8414/85 14 vect__gnu_cxx::__promote_2<__gnu_cxx::__enable_if<(std::__is_arithmetic<double>::__value)&&(std::__is_arithmetic<int>::__value), double>::__type, int>::__type std::vectpow<double, int>(double, int) [2140]
-----------------------------------------------
0.00 0.00 51/14 void std::vector<int, std::allocator<int> >::_M_insert_aux<int const&>1 main [1][17] 0.0 0.00 0.00 1 initialize(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&&&) [7317] 0.00 0.00 9 41/14 std5032775 vect::vector<int, std::allocator<int> >::push_backoperator=(int vect const&) [3911][38] 0.0 0.00 0.00 14 __gnu_cxx11/118268959 vect::new_allocator<int>::constructoperator*(int*, int double const&) [385] 0.00 0.00 1441/16 operator new5032775 vect::vect(unsigned intdouble, double, void*double) [3413]
-----------------------------------------------
0.00 0.00 14 1/14 85 main [1][39] 0.0 0.00 0.00 14 std::vector<int, std::allocator<int> >::push_backtotalL(int const&) [3914] 0.00 0.00 9 84/14 85 __gnu_cxx:cobject:new_allocator<int>::constructcobject(int*, int const&) [3837] [21] 0.00 0 0.00 5/5 std::vector<int, std::allocator<int> >::end() [74] 0.00 0.00 5/5 void std::vector<int, std 85 vect::allocator<int> >::_M_insert_aux<int const&>vect(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&&&) [7321]
-----------------------------------------------
0.00 0.00 1442/14 42 totalE() main [161][4022] 0.0 0.00 0.00 14 42 __gnu_cxx::__promote_2<__gnu_cxx::__enable_if<(std::__is_arithmeticvector<double>::__value)&&(int, std::__is_arithmeticallocator<int>::__value), double>::__type, int>::__type std::pow<double, int>operator[](double, unsigned int) [4022]
-----------------------------------------------
0.00 0.00 1215/12 35 main [1] 0.00 0.00 20/35 std::_Niter_basevector<double*>::iterator_type int, std::__niter_baseallocator<double*int> >::_M_check_len(doubleunsigned int, char const*) const [4271][4123] 0.0 0.00 0.00 12 35 std::_Iter_basevector<double*int, falsestd::allocator<int> >::_S_basesize(double*) const [4123]
-----------------------------------------------
0.00 0.00 1230/12 30 double* std::__copy_move_a2<true, double*, double*>(double*, double*, double*) [83][42] 0.0 0.00 0.00 12 std::_Niter_base<doubleint*>::iterator_type std::__niter_base<doubleint*>(doubleint*) [4225] [24] 0.0 0.00 0.00 12/12 30 std::_Iter_base<doubleint*, false>::_S_base(doubleint*) [4124]
-----------------------------------------------
0.00 0.00 5 30/10 30 int* std::vector__copy_move_a2<true, int*, std::allocator<int*> >::end(int*, int*, int*) [7450] [25] 0.0 0.00 0.00 5/10 30 std::vector_Niter_base<int, *>::iterator_type std::allocator__niter_base<int*> >::begin(int*) [7525][43] 0.0 0.00 0.00 10 __gnu_cxx30/30 std::__normal_iterator_Iter_base<int*, std::vector<int, std::allocator<int> > false>::__normal_iterator_S_base(int* const&) [4324]
-----------------------------------------------
0.00 0.00 10/20 void std::vector<int, std::allocator<int> >::_M_insert_aux<int const&>(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&&&) [73] 0.00 0.00 10 /20 __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> >>::difference_type __gnu_cxx::operator-<int*, std::vector<int, std::max_sizeallocator<int> > >(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > > const&, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > > const&) const [4670][4426] 0.0 0.00 0.00 10 20 __gnu_cxx::__normal_iterator<int*, std::_Vector_basevector<int, std::allocator<int> > >::_M_get_Tp_allocatorbase() const [4426]
-----------------------------------------------
0.00 0.00 2 20/10 main [1] 0.00 0.00 8/10 20 std::vector_Iter_base<double, std::allocatormove_iterator<doubleint*> , true>::_M_check_len_S_base(unsigned std::move_iterator<int, char const*>) const [9828][4527] 0.0 0.00 0.00 10 20 std::vectormove_iterator<double, std::allocator<double> int*>::sizebase() const [4527]
-----------------------------------------------
0.00 0.00 1020/10 20 std::vector_Miter_base<std::move_iterator<int, *> >::iterator_type std::__miter_base<std::allocatormove_iterator<int*> >(std::_M_check_len(unsigned move_iterator<int, char const*>) const [7130][4628] 0.0 0.00 0.00 10 20 std::vector_Iter_base<int, std::allocatormove_iterator<int*> , true>::max_size_S_base() const [46] 0.00 0.00 10/10 std::_Vector_basemove_iterator<int, std::allocator<int> *>::_M_get_Tp_allocator() const [4428] 0.00 0.00 1020/15 20 __gnu_cxxstd::new_allocatormove_iterator<int*>::max_sizebase() const [3527]
-----------------------------------------------
0.00 0.00 1020/10 20 std::move_iterator<int* > std::__copy_move_amake_move_iterator<true, int*, int*>(int*, int*, int*const&) [4931][4729] 0.0 0.00 0.00 10 20 int* std::__copy_movemove_iterator<true, true, std::random_access_iterator_tagint*>::__copy_m<int>move_iterator(int const*, int const*, int*) [4729]
-----------------------------------------------
0.00 0.00 1020/10 20 int* std::uninitialized_copycopy<std::move_iterator<int*>, int*>(std::move_iterator<int*>, std::move_iterator<int*>, int*) [5154][4830] 0.0 0.00 0.00 10 20 int* std::__uninitialized_copy<true>::__uninit_copy_Miter_base<std::move_iterator<int*>, int*>(::iterator_type std::__miter_base<std::move_iterator<int*>, >(std::move_iterator<int*>, int*) [4830] 0.00 0.00 1020/10 20 int* std::copy_Iter_base<std::move_iterator<int*>, int*true>(std::move_iterator<int*>, _S_base(std::move_iterator<int*>, int*) [5428]
-----------------------------------------------
0.00 0.00 1020/10 20 int* std::__copy_move_a2__uninitialized_move_a<trueint*, int*, std::allocator<int*> >(int*, int*, int*, std::allocator<int>&) [5053][4931] 0.0 0.00 0.00 10 20 std::move_iterator<int* > std::__copy_move_amake_move_iterator<true, int*, int*>(int*, int*, int*const&) [4931] 0.00 0.00 1020/10 20 int* std::__copy_movemove_iterator<true, true, std::random_access_iterator_tagint*>::__copy_m<int>move_iterator(int const*, int const*, int*) [4729]
-----------------------------------------------
0.00 0.00 10 1/10 16 int* std::copy<std::move_iteratorvector<int*>, int*>(std::move_iteratorallocator<int*>, std>::move_iterator<int*>, int*~vector() [54145][50] 0.0 0.00 0.00 10 15/16 void std::vector<int* , std::__copy_move_a2allocator<true, int*, > >::_M_insert_aux<int*const&>(__gnu_cxx::__normal_iterator<int*, int*, int*) [50] 0.00 0.00 30/30 std::_Niter_basevector<int*>::iterator_type , std::__niter_baseallocator<int*>(> >, int*const&&&) [2573] [32] 0.0 0.00 0.00 10/10 int* 16 std::__copy_move_a_Vector_base<true, int*, std::allocator<int*>>::_M_get_Tp_allocator(int*, int*, int*) [4932]
-----------------------------------------------
0.00 0.00 1016/10 16 int* std::__uninitialized_copy_a<std::move_iterator<int*>, int*, int>(std::move_iterator<int*>, std::move_iterator<int*>, int*, std::allocator<int>&) main [521][5133] 0.0 0.00 0.00 10 16 int* std::uninitialized_copy<bool std::move_iteratoroperator==<int*>char, int*>(std::move_iteratorchar_traits<int*char>, std::move_iteratorallocator<int*char>, int*) [51] 0.00 0.00 10/10 int* std::__uninitialized_copy<true>::__uninit_copy<(std::move_iteratorbasic_string<int*>char, int*>(std::move_iteratorchar_traits<int*char>, std::move_iteratorallocator<int*char> >const&, intchar const*) [4833]
-----------------------------------------------
0.00 0.00 10 1/10 16 int* std__gnu_cxx::__uninitialized_move_anew_allocator<int*, int*, stddouble>::allocator<int> >construct(intdouble*, int*, int*, std::allocator<int>double const&) [53108][52] 0.0 0.00 0.00 10 int* std 1/16 void __gnu_cxx::__uninitialized_copy_anew_allocator<stddouble>::move_iteratorconstruct<int*>, int*, intdouble>(std::move_iterator<intdouble*>, std::move_iterator<int*>, int*, std::allocator<int>double&&) [52109] 0.00 0.00 1014/10 16 int* std__gnu_cxx::uninitialized_copynew_allocator<stdint>::move_iterator<construct(int*>, int*>const&) [38][34] 0.0 0.00 0.00 16 operator new(std::move_iterator<int*>, std::move_iterator<unsigned int*>, intvoid*) [5134]
-----------------------------------------------
0.00 0.00 10 5/10 15 void std__gnu_cxx::vector<int, std::allocatornew_allocator<int> >::_M_insert_aux<int const&>allocate(__gnu_cxx::__normal_iterator<unsigned int*, std::vector<int, std::allocator<int> > >, int void const&&&*) [7369][53] 0.0 0.00 0.00 10 int* /15 std::__uninitialized_move_avector<int*, int*, std::allocator<int> >(int*, int*, int*, std::allocator<int>&max_size() const [5346] [35] 0.00 0 0.00 20/20 std::move_iterator<int*> std::make_move_iterator<int*>(int* const&) [31] 0.00 0.00 10/10 int* std::__uninitialized_copy_a<std15 __gnu_cxx::move_iteratornew_allocator<int*>, int*, int>(std::move_iterator<int*>, std::move_iterator<int*>, int*, std::allocator<int>&max_size() const [5235]
-----------------------------------------------
0.00 0.00 1014/10 14 int* std::__uninitialized_copy<true>::__uninit_copy<std::move_iterator<int*>, int*>(std::move_iterator<int*>, std::move_iterator<int*>, int*) main [481][5436] 0.0 0.00 0.00 10 14 int* std::copy<std::move_iterator<int*>, int*>(std::move_iterator<int*>, std::move_iterator<int*>, int*) [54] 0.00 0.00 20/20 std::_Miter_base<std::move_iterator<int*> >::iterator_type std::__miter_base<std::move_iterator<int*> >(std::move_iterator<int*>) [30] 0.00 0.00 10/10 int* std::__copy_move_a2<true, int*, int*>getobj(int*, int*, int*) [5036]
-----------------------------------------------
0.00 0.00 2 14/8 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>14 __static_initialization_and_destruction_0(__gnu_cxx::__normal_iterator<double*, std::vector<doubleint, std::allocator<double> > >, double const&&&int) [138105] [37] 0.00 0 0.00 2/8 void std::vector<double, std::allocator<double> >::_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double&&) [139] 0.00 0.00 4/8 __gnu_cxx::__normal_iterator<double*, std: 14 cobject:vector<double, std::allocator<double> > >::difference_type __gnu_cxx::operator-<double*, std::vector<double, std::allocator<double> > >cobject(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > > const&, __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > > const&) [9737][55] 0.0 0.00 0.00 8 __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > > 84/85 vect::basevect() const [5521]
-----------------------------------------------
0.00 0.00 85/8 14 void std::_Iter_basevector<int, std::move_iteratorallocator<int> >::_M_insert_aux<int const&>(__gnu_cxx::__normal_iterator<doubleint*, std::vector<int, std::allocator<int> > >, true>int const&&&) [73] 0.00 0.00 9/14 std::_S_base(vector<int, std::move_iteratorallocator<double*int> >::push_back(int const&) [5739][5638] 0.0 0.00 0.00 8 14 std__gnu_cxx::move_iteratornew_allocator<double*int>::baseconstruct(int*, int const&) [38] 0.00 0.00 14/16 operator new(unsigned int, void*) const [5634]
-----------------------------------------------
0.00 0.00 8 14/8 14 main [1][39] 0.0 0.00 0.00 14 std::_Miter_basevector<int, std::move_iteratorallocator<double*int> >::iterator_type stdpush_back(int const&) [39] 0.00 0.00 9/14 __gnu_cxx::__miter_basenew_allocator<stdint>::move_iterator<double*> >construct(std::move_iterator<doubleint*>, int const&) [5938][57] 0.0 0.00 0.00 8 5/5 std::_Iter_basevector<int, std::move_iteratorallocator<double*int>, true>::_S_baseend(std::move_iterator<double*>) [5774] 0.00 0.00 85/8 5 void std::vector<int, std::move_iteratorallocator<double*int> >::base_M_insert_aux<int const&>(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&&&) const [5673]
-----------------------------------------------
0.00 0.00 8 14/8 std::move_iterator<double*> std::make_move_iterator<double*>14 totalE(double* const&) [6016][5840] 0.0 0.00 0.00 8 14 __gnu_cxx::__promote_2<__gnu_cxx::__enable_if<(std::__is_arithmetic<double>::__value)&&(std::move_iterator__is_arithmetic<int>::__value), double*>::move_iterator__type, int>::__type std::pow<double, int>(double*, int) [5840]
-----------------------------------------------
0.00 0.00 8 12/8 double* std::copy<12 std::move_iterator_Niter_base<double*>, double*>(std::move_iterator<double*>, iterator_type std::move_iterator__niter_base<double*>, (double*) [8742][5941] 0.0 0.00 0.00 8 12 std::_Miter_base<std::move_iterator<double*> >::iterator_type std::__miter_base<std::move_iterator<double*> >(std::move_iterator<double*>) [59] 0.00 0.00 8/8 std::_Iter_base<std::move_iterator<double*>, truefalse>::_S_base(std::move_iterator<double*>) [5741]
-----------------------------------------------
0.00 0.00 8 12/8 12 double* std::__uninitialized_move_a__copy_move_a2<true, double*, double*, std::allocator<double> >(double*, double*, double*, std::allocator<double>&) [8683][6042] 0.0 0.00 0.00 8 12 std::move_iterator_Niter_base<double*> ::iterator_type std::make_move_iterator__niter_base<double*>(double* const&) [6042] 0.00 0.00 8 12/8 12 std::move_iterator_Iter_base<double*, false>::move_iterator_S_base(double*) [5841]
-----------------------------------------------
0.00 0.00 15/7 10 std::vector<doubleint, std::allocator<doubleint> >::~vectorend() [14374] 0.00 0.00 35/7 void 10 std::vector<doubleint, std::allocator<doubleint> >::_M_insert_aux<double const&>begin(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) [13875] [43] 0.0 0.00 0.00 3/7 void std::vector<double, std::allocator<double> >::_M_insert_aux<double>( 10 __gnu_cxx::__normal_iterator<doubleint*, std::vector<doubleint, std::allocator<doubleint> > >, double&&) [139][61] 0.0 0.00 0.00 7 std::_Vector_base<double, std::allocator<double> >::_M_get_Tp_allocator__normal_iterator(int* const&) [6143]
-----------------------------------------------
0.00 0.00 2 10/7 10 std::vector<doubleint, std::allocator<doubleint> >::_M_check_lenmax_size(unsigned int, char const*) const [9846] [44] 0.0 0.00 0.00 5/7 10 std::vector_Vector_base<int, std::allocator<int> >::_M_check_len_M_get_Tp_allocator(unsigned int, char const*) const [71][62] 0.0 0.00 0.00 7 unsigned int const& std::max<unsigned int>(unsigned int const&, unsigned int const&) [6244]
-----------------------------------------------
0.00 0.00 2/6 __gnu_cxx::new_allocator<double>::allocate(unsigned int, void const*) 10 main [961] 0.00 0.00 48/6 10 std::vector<double, std::allocator<double> >::max_size_M_check_len(unsigned int, char const*) const [7998][6345] 0.0 0.00 0.00 6 10 __gnu_cxxstd::new_allocatorvector<double, std::allocator<double> >::max_sizesize() const [6345]
-----------------------------------------------
0.00 0.00 6 10/6 void 10 std::_Destroyvector<int*, std::allocator<int> >::_M_check_len(unsigned int*, intchar const*) const [6671][6446] 0.0 0.00 0.00 6 10 void std::_Destroy_auxvector<true>int, std::__destroyallocator<int*>>::max_size() const [46] 0.00 0.00 10/10 std::_Vector_base<int*, std::allocator<int*> >::_M_get_Tp_allocator() const [44] 0.00 0.00 10/15 __gnu_cxx::new_allocator<int>::max_size() const [6435]
-----------------------------------------------
0.00 0.00 1 10/6 10 int* std::_Vector_base__copy_move_a<inttrue, std::allocator<int> >::~_Vector_base() [134] 0.00 0.00 5/6 void std::vector<int*, std::allocator<int> >::_M_insert_aux<int const&*>(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >*, int const&&&*) [7349][6547] 0.0 0.00 0.00 6 10 int* std::_Vector_base__copy_move<inttrue, true, std::allocatorrandom_access_iterator_tag>::__copy_m<int> >::_M_deallocate(intconst*, unsigned int) [65] 0.00 0.00 5/5 __gnu_cxx::new_allocator<int>::deallocate(intconst*, unsigned int*) [6847]
-----------------------------------------------
0.00 0.00 6 10/6 void 10 int* std::_Destroyuninitialized_copy<std::move_iterator<int*>, int*>(std::move_iterator<int*, int*>, std::allocatormove_iterator<int*>&, int*) [6751][6648] 0.0 0.00 0.00 6 10 void int* std::_Destroy__uninitialized_copy<true>::__uninit_copy<std::move_iterator<int*>, int*>(std::move_iterator<int*>, std::move_iterator<int*>, int*) [6648] 0.00 0.00 6 10/6 void 10 int* std::_Destroy_auxcopy<truestd::move_iterator<int*>, int*>(std::__destroymove_iterator<int*>(, std::move_iterator<int*>, int*) [6454]
-----------------------------------------------
0.00 0.00 1 10/6 10 int* std::vector__copy_move_a2<inttrue, std::allocator<int> >::~vector() [145] 0.00 0.00 5/6 void std::vector<int*, std::allocator<int> >::_M_insert_aux<int const&*>(__gnu_cxx::__normal_iterator<int*, std::vector<int*, std::allocator<int> > >, int const&&&*) [7350][6749] 0.0 0.00 0.00 6 10 void int* std::_Destroy__copy_move_a<true, int*, int*>(int*, int*, std::allocator<int>&*) [6749] 0.00 0.00 6 10/6 void 10 int* std::__copy_move<true, true, std::_Destroyrandom_access_iterator_tag>::__copy_m<int*>(intconst*, int const*, int*) [6647]
-----------------------------------------------
0.00 0.00 5 10/5 10 int* std::copy<std::_Vector_basemove_iterator<int*>, int*>(std::allocatormove_iterator<int*> >, std::_M_deallocate(move_iterator<int*>, unsigned int*) [6554][6850] 0.0 0.00 0.00 5 10 __gnu_cxxint* std::new_allocator__copy_move_a2<true, int*, int*>(int*, int*, int*) [50] 0.00 0.00 30/30 std::_Niter_base<int*>::iterator_type std::deallocate__niter_base<int*>(int*) [25] 0.00 0.00 10/10 int* std::__copy_move_a<true, unsigned int*, int*>(int*, int*, int*) [6849]
-----------------------------------------------
0.00 0.00 5 10/5 10 int* std::__uninitialized_copy_a<std::_Vector_basemove_iterator<int*>, int*, int>(std::allocatormove_iterator<int*> , std::move_iterator<int*>, int*, std::_M_allocate(unsigned allocator<int>&) [7252][6951] 0.0 0.00 0.00 5 10 __gnu_cxxint* std::uninitialized_copy<std::move_iterator<int*>, int*>(std::new_allocatormove_iterator<int*>, std::allocate(unsigned move_iterator<int*>, void constint*) [6951] 0.00 0.00 5 10/15 10 __gnu_cxxint* std::__uninitialized_copy<true>::__uninit_copy<std:new_allocator:move_iterator<int*>, int*>(std::max_size(move_iterator<int*>, std::move_iterator<int*>, int*) const [3548]
-----------------------------------------------
0.00 0.00 5 10/5 void 10 int* std::vector__uninitialized_move_a<int*, int*, std::allocator<int> >::_M_insert_aux<(int const&>(__gnu_cxx::__normal_iterator<*, int*, std::vector<int*, std::allocator<int> > >, int const&&&) [7353][7052] 0.0 0.00 0.00 5 10 __gnu_cxx::__normal_iterator<int*, std::vector__uninitialized_copy_a<int, std::allocatormove_iterator<int*> > >::difference_type __gnu_cxx::operator-<, int*, std::vector<int, std::allocator<int> > >(__gnu_cxxstd::__normal_iteratormove_iterator<int*>, std::vector<int, std::allocatormove_iterator<int*> > > const&, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > > const&) [7052] 0.00 0.00 10/20 10 __gnu_cxxint* std::uninitialized_copy<std::__normal_iteratormove_iterator<int*>, int*>(std::vectormove_iterator<int*>, std::allocatormove_iterator<int*> > >::base(, int*) const [2651]
-----------------------------------------------
0.00 0.00 5 10/5 10 void std::vector<int, std::allocator<int> >::_M_insert_aux<int const&>(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&&&) [73][7153] 0.0 0.00 0.00 5 10 int* std::vector__uninitialized_move_a<int*, int*, std::allocator<int> >::_M_check_len(unsigned int*, int*, char constint*, std::allocator<int>&) const [7153] 0.00 0.00 20/35 20 std::vectormove_iterator<int, *> std::allocatormake_move_iterator<int*> >::size(int* const&) const [2331] 0.00 0.00 10/10 int* std::vector__uninitialized_copy_a<int, std::allocatormove_iterator<int*> , int*, int>(std::max_size() const [46] 0.00 0.00 5/7 unsigned move_iterator<int const& *>, std::maxmove_iterator<unsigned int*>(unsigned , int const&*, unsigned std::allocator<int const>&) [6252]
-----------------------------------------------
0.00 0.00 5 10/5 void std::vector<10 int, * std::allocator__uninitialized_copy<int> true>::_M_insert_aux__uninit_copy<int const&>(__gnu_cxxstd::__normal_iteratormove_iterator<int*>, int*>(std::vectormove_iterator<int*>, std::allocatormove_iterator<int> > *>, int const&&&*) [7348][7254] 0.0 0.00 0.00 5 10 int* std::copy<std::move_iterator<int*>, int*>(std::_Vector_basemove_iterator<int*>, std::allocatormove_iterator<int*>, int*) [54] 0.00 0.00 20/20 std::_Miter_base<std::move_iterator<int*> >::_M_allocateiterator_type std::__miter_base<std::move_iterator<int*> >(unsigned std::move_iterator<int*>) [7230] 0.00 0.00 5 10/5 __gnu_cxx10 int* std::new_allocator__copy_move_a2<true, int*, int*>::allocate(unsigned int*, int*, void constint*) [6950]
-----------------------------------------------
0.00 0.00 52/5 8 std::vector<int, std::allocator<int> >::push_back(int const&) [39][73] 0.0 0.00 0.00 5 void std::vector<intdouble, std::allocator<intdouble> >::_M_insert_aux<int double const&>(__gnu_cxx::__normal_iterator<intdouble*, std::vector<intdouble, std::allocator<intdouble> > >, int double const&&&) [73138] 0.00 0.00 15 2/16 8 void std::_Vector_basevector<intdouble, std::allocator<intdouble> >::_M_get_Tp_allocator_M_insert_aux<double>() [32] 0.00 0.00 10/20 __gnu_cxx::__normal_iterator<intdouble*, std::vector<intdouble, std::allocator<intdouble> > >::base() const [26] 0.00 0.00 10/10 int* std::__uninitialized_move_a<int*, int*, std::allocator<int> >(int*, int*, int*, std::allocator<int>double&&) [53139] 0.00 0.00 54/5 std::vector<int, std::allocator<int> >::_M_check_len(unsigned int, char const*) const [71] 0.00 0.00 5/5 std::vector<int, std::allocator<int> >::begin() [75] 0.00 0.00 5/5 8 __gnu_cxx::__normal_iterator<intdouble*, std::vector<intdouble, std::allocator<intdouble> > >::difference_type __gnu_cxx::operator-<intdouble*, std::vector<intdouble, std::allocator<intdouble> > >(__gnu_cxx::__normal_iterator<intdouble*, std::vector<intdouble, std::allocator<intdouble> > > const&, __gnu_cxx::__normal_iterator<intdouble*, std::vector<intdouble, std::allocator<intdouble> > > const&) [7097] 0.00 0.00 5/5 std::_Vector_base<int, std::allocator<int> >::_M_allocate(unsigned int) [7255] 0.00 0 0.00 5/5 int const&&& std::forward<int const&>(std::remove_reference<int const&>::type&) [76] 0.00 0.00 5/14 8 __gnu_cxx::new_allocator__normal_iterator<int>::construct(intdouble*, int const&) [38] 0.00 0.00 5/6 void std::_Destroyvector<int*, int>(int*, int*double, std::allocator<intdouble>&) [67] 0.00 0.00 5/6 std::_Vector_base<int, std::allocator<int> >::_M_deallocatebase(int*, unsigned int) const [6555]
-----------------------------------------------
0.00 0.00 58/5 8 std::vector_Iter_base<int, std::allocatormove_iterator<intdouble*> , true>::push_back_S_base(int const&std::move_iterator<double*>) [3957][7456] 0.0 0.00 0.00 5 8 std::vectormove_iterator<int, std::allocator<int> double*>::endbase() [74] 0.00 0.00 5/10 __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >::__normal_iterator(int* const&) [4356]
-----------------------------------------------
0.00 0.00 58/5 8 void std::vector_Miter_base<int, std::allocatormove_iterator<intdouble*> >::_M_insert_aux<int const&>(__gnu_cxxiterator_type std::__normal_iterator__miter_base<int*, std::vectormove_iterator<int, double*> >(std::allocatormove_iterator<int> double*> >, int const&&&) [7359][7557] 0.0 0.00 0.00 5 8 std::vector_Iter_base<int, std::allocatormove_iterator<intdouble*> , true>::begin_S_base(std::move_iterator<double*>) [7557] 0.00 0.00 58/10 __gnu_cxx8 std::__normal_iteratormove_iterator<intdouble*, std::vector<int, std::allocator<int> > >::__normal_iteratorbase(int* ) const&) [4356]
-----------------------------------------------
0.00 0.00 58/5 8 void std::vectormove_iterator<int, double*> std::allocatormake_move_iterator<int> >::_M_insert_aux<int const&double*>(__gnu_cxx::__normal_iterator<intdouble*, std::vector<int, std::allocator<int> > >, int const&&&) [7360][7658] 0.0 0.00 0.00 5 8 int const&&& std::forwardmove_iterator<int const&double*>(std::remove_reference<int const&>::type&move_iterator(double*) [7658]
-----------------------------------------------
0.00 0.00 28/4 8 double* std::copy<std::vectormove_iterator<double*>, double*>(std::allocatormove_iterator<double*> >, std::end(move_iterator<double*>, double*) [10087] [59] 0.0 0.00 0.00 2/4 8 std::_Miter_base<std::vectormove_iterator<double, *> >::iterator_type std::__miter_base<std::allocatormove_iterator<double*> >(std::begin(move_iterator<double*>) [10159][77] 0.0 0.00 0.00 4 __gnu_cxx::__normal_iterator<double*, 8/8 std::vector_Iter_base<double, std::allocatormove_iterator<double*> > , true>::__normal_iterator_S_base(std::move_iterator<double* const&>) [7757]
-----------------------------------------------
0.00 0.00 48/4 8 double* std::vector__uninitialized_move_a<double*, double*, std::allocator<double> >(double*, double*, double*, std::max_size(allocator<double>&) const [7986][7860] 0.0 0.00 0.00 4 8 std::_Vector_basemove_iterator<double, *> std::allocatormake_move_iterator<double*> (double* const&) [60] 0.00 0.00 8/8 std::move_iterator<double*>::_M_get_Tp_allocatormove_iterator(double*) const [7858]
-----------------------------------------------
0.00 0.00 41/4 7 std::vector<double, std::allocator<double> >::_M_check_len~vector(unsigned int, char const*) const [98143][79] 0.0 0.00 0.00 4 3/7 void std::vector<double, std::allocator<double> >::max_size_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) const [79138] 0.00 0.00 43/4 7 void std::_Vector_basevector<double, std::allocator<double> >::_M_get_Tp_allocator_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double&&) const [78139] [61] 0.0 0.00 0.00 4/6 __gnu_cxx7 std::_Vector_base<double, std::new_allocatorallocator<double> >::max_size_M_get_Tp_allocator() const [6361]
-----------------------------------------------
0.00 0.00 42/4 7 double* std::__copy_move_avector<true, double*, std::allocator<double*>>::_M_check_len(doubleunsigned int, char const*) const [98] 0.00 0.00 5/7 std::vector<int, double*std::allocator<int> >::_M_check_len(unsigned int, doublechar const*) const [8271][8062] 0.0 0.00 0.00 4 7 double* unsigned int const& std::__copy_movemax<true, true, std::random_access_iterator_tag>::__copy_m<doubleunsigned int>(double unsigned int const*&, double unsigned int const*, double*&) [8062]
-----------------------------------------------
0.00 0.00 42/4 6 double* std::uninitialized_copy<std::move_iterator<double*>, double*>(std__gnu_cxx::move_iteratornew_allocator<double*>, std::move_iterator<double*>allocate(unsigned int, doublevoid const*) [8496][81] 0.0 0.00 0.00 4 double* std::__uninitialized_copy<true>::__uninit_copy</6 std::move_iteratorvector<double*>, double*>(std::move_iteratorallocator<double*>, std>::move_iterator<double*>, double*max_size() const [8179] [63] 0.0 0.00 0.00 4/4 double* std6 __gnu_cxx::copynew_allocator<std::move_iterator<double*>, double*>(std::move_iterator<double*>, std::move_iterator<double*>, double*max_size() const [8763]
-----------------------------------------------
0.00 0.00 46/4 6 double* void std::__copy_move_a2_Destroy<true, double*, doubleint*>(double*, doubleint*, doubleint*) [8366][8264] 0.0 0.00 0.00 4 6 double* std::__copy_move_a<true, double*, double*>(double*, double*, double*) [82] 0.00 0.00 4/4 double* void std::__copy_move_Destroy_aux<true, true, std::random_access_iterator_tag>::__copy_m__destroy<doubleint*>(double const*, double constint*, doubleint*) [8064]
-----------------------------------------------
0.00 0.00 41/4 6 double* std::copy_Vector_base<int, std::move_iteratorallocator<double*int> >::~_Vector_base() [134] 0.00 0.00 5/6 void std::vector<int, double*std::allocator<int> >::_M_insert_aux<int const&>(__gnu_cxx::__normal_iterator<int*, std::move_iteratorvector<double*>int, std::move_iteratorallocator<double*int> > >, double*int const&&&) [8773][8365] 0.0 0.00 0.00 4 6 double* std::__copy_move_a2_Vector_base<true, double*, double*>(double*, double*int, double*) [83] 0.00 0.00 12/12 std::_Niter_baseallocator<double*int> >::iterator_type std::__niter_base<double*>_M_deallocate(doubleint*, unsigned int) [4265] 0.00 0.00 45/4 5 double* std__gnu_cxx::__copy_move_anew_allocator<true, double*, double*int>::deallocate(doubleint*, double*, double*unsigned int) [8268]
-----------------------------------------------
0.00 0.00 46/4 6 double* std::__uninitialized_copy_a<void std::move_iterator_Destroy<double*>, doubleint*, doubleint>(std::move_iterator<double*>, std::move_iterator<doubleint*>, doubleint*, std::allocator<doubleint>&) [8567][8466] 0.0 0.00 0.00 4 6 double* void std::uninitialized_copy_Destroy<std::move_iterator<double*>, doubleint*>(std::move_iterator<doubleint*>, std::move_iterator<double*>, doubleint*) [8466] 0.00 0.00 46/4 6 double* void std::__uninitialized_copy_Destroy_aux<true>::__uninit_copy<std::move_iterator__destroy<double*>, doubleint*>(std::move_iterator<doubleint*>, std::move_iterator<double*>, doubleint*) [8164]
-----------------------------------------------
0.00 0.00 41/4 6 double* std::__uninitialized_move_avector<double*int, double*std::allocator<int> >::~vector() [145] 0.00 0.00 5/6 void std::vector<int, std::allocator<doubleint> >::_M_insert_aux<int const&>(double__gnu_cxx::__normal_iterator<int*, double*, double*std::vector<int, std::allocator<doubleint> > >, int const&&&) [8673][8567] 0.0 0.00 0.00 4 6 double* std::__uninitialized_copy_a<void std::move_iterator_Destroy<doubleint*>, double*, doubleint>(std::move_iterator<double*>, std::move_iterator<doubleint*>, doubleint*, std::allocator<doubleint>&) [8567] 0.00 0.00 46/4 6 double* std::uninitialized_copy<void std::move_iterator_Destroy<double*>, doubleint*>(std::move_iterator<doubleint*>, std::move_iterator<double*>, doubleint*) [8466]
-----------------------------------------------
0.00 0.00 25/4 5 void std::vector_Vector_base<doubleint, std::allocator<doubleint> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) [138] 0.00 0.00 2/4 void std::vector<double, std::allocator<double> >::_M_insert_aux<double>_M_deallocate(__gnu_cxx::__normal_iterator<doubleint*, std::vector<double, std::allocator<double> > >, double&&unsigned int) [13965][8668] 0.0 0.00 0.00 4 5 double* std::__uninitialized_move_a<double*, double*, std::allocator<double> >(double*, double*, double*, std__gnu_cxx::allocatornew_allocator<doubleint>&) [86] 0.00 0.00 8/8 std::move_iterator<double*> std::make_move_iterator<double*>(double* const&) [60] 0.00 0.00 4/4 double* std::__uninitialized_copy_a<std::move_iterator<double*>, double*, double>deallocate(std::move_iterator<doubleint*>, std::move_iterator<double*>, double*, std::allocator<double>&unsigned int) [8568]
-----------------------------------------------
0.00 0.00 45/4 5 double* std::__uninitialized_copy<true>::__uninit_copy_Vector_base<int, std::move_iteratorallocator<double*int>, double*>(std::move_iterator<double*>, std::move_iterator<double*>, double*_M_allocate(unsigned int) [8172][8769] 0.0 0.00 0.00 4 5 double* std__gnu_cxx::copynew_allocator<stdint>::move_iterator<double*>, double*>allocate(std::move_iterator<double*>unsigned int, std::move_iterator<double*>, doublevoid const*) [8769] 0.00 0.00 85/8 std15 __gnu_cxx::_Miter_basenew_allocator<std::move_iterator<double*> int>::iterator_type std::__miter_base<std::move_iterator<double*> >max_size(std::move_iterator<double*>) [59] 0.00 0.00 4/4 double* std::__copy_move_a2<true, double*, double*>(double*, double*, double*) const [8335]
-----------------------------------------------
0.00 0.00 35/3 5 void std::_Destroyvector<double*int, std::allocator<int> >::_M_insert_aux<int const&>(double__gnu_cxx::__normal_iterator<int*, double*std::vector<int, std::allocator<int> > >, int const&&&) [9273][8870] 0.0 0.00 0.00 3 5 void __gnu_cxx::__normal_iterator<int*, std::vector<int, std::_Destroy_auxallocator<trueint> > >::__destroydifference_type __gnu_cxx::operator-<doubleint*, std::vector<int, std::allocator<int> > >(double__gnu_cxx::__normal_iterator<int*, doublestd::vector<int, std::allocator<int> > > const&, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > > const&) [70] 0.00 0.00 10/20 __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >::base() const [8826]
-----------------------------------------------
0.00 0.00 15/3 std::_Vector_base<double, std::allocator<double> >::~_Vector_base() [130] 0.00 0.00 1/3 5 void std::vector<doubleint, std::allocator<doubleint> >::_M_insert_aux<double int const&>(__gnu_cxx::__normal_iterator<doubleint*, std::vector<doubleint, std::allocator<doubleint> > >, double int const&&&) [13873] [71] 0.0 0.00 0.00 1/3 void 5 std::vector<doubleint, std::allocator<doubleint> >::_M_insert_aux<double>_M_check_len(__gnu_cxx::__normal_iterator<doubleunsigned int, char const*, ) const [71] 0.00 0.00 20/35 std::vector<doubleint, std::allocator<doubleint> > >, double&&::size() const [13923][89] 0.0 0.00 0.00 3 10/10 std::_Vector_basevector<doubleint, std::allocator<doubleint> >::_M_deallocatemax_size(double*, unsigned int) const [8946] 0.00 0.00 25/2 7 __gnu_cxxunsigned int const& std::new_allocatormax<doubleunsigned int>::deallocate(double*unsigned int const&, unsigned intconst&) [9562]
-----------------------------------------------
0.00 0.00 35/3 5 main void std::vector<int, std::allocator<int> >::_M_insert_aux<int const&>(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&&&) [173][9072] 0.0 0.00 0.00 3 5 std::vector_Vector_base<doubleint, std::allocator<doubleint> >::operator_M_allocate(unsigned int) [72] 0.00 0.00 5/5 __gnu_cxx::new_allocator<int>::allocate(unsigned int, void const*) [9069]
-----------------------------------------------
0.00 0.00 15/3 5 std::vector<int, std::allocator<int> >::push_back(int const&) [39][73] 0.0 0.00 0.00 5 void std::vector<doubleint, std::allocator<doubleint> >::emplace_back_M_insert_aux<doubleint const&>(double__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&&&) [13773] 0.00 0.00 1 15/16 std::_Vector_base<int, std::allocator<int> >::_M_get_Tp_allocator() [32] 0.00 0.00 10/3 void 20 __gnu_cxx::new_allocator__normal_iterator<int*, std::vector<int, std::allocator<doubleint> > >::constructbase() const [26] 0.00 0.00 10/10 int* std::__uninitialized_move_a<int*, int*, std::allocator<doubleint> >(doubleint*, int*, int*, double&std::allocator<int>&) [10953] 0.00 0.00 15/3 5 void std::vector<doubleint, std::allocator<doubleint> >::_M_insert_aux_M_check_len(unsigned int, char const*) const [71] 0.00 0.00 5/5 std::vector<int, std::allocator<doubleint> >::begin() [75] 0.00 0.00 5/5 __gnu_cxx::__normal_iterator<doubleint*, std::vector<doubleint, std::allocator<doubleint> > >::difference_type __gnu_cxx::operator-<int*, std::vector<int, std::allocator<int> > >(__gnu_cxx::__normal_iterator<int*, doublestd::vector<int, std::allocator<int> > > const&, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > > const&) [13970][91] 0.0 0.00 5/5 std::_Vector_base<int, std::allocator<int> >::_M_allocate(unsigned int) [72] 0.00 0.00 3 double5/5 int const&&& std::forward<doubleint const&>(std::remove_reference<doubleint const&>::type&) [9176] 0.00 0.00 5/14 __gnu_cxx::new_allocator<int>::construct(int*, int const&) [38] 0.00 0.00 5/6 void std::_Destroy<int*, int>(int*, int*, std::allocator<int>&) [67] 0.00 0.00 5/6 std::_Vector_base<int, std::allocator<int> >::_M_deallocate(int*, unsigned int) [65]
-----------------------------------------------
0.00 0.00 35/3 5 void std::_Destroyvector<double*, double>(double*, double*int, std::allocator<doubleint>>::push_back(int const&) [9339][9274] 0.0 0.00 0.00 3 5 void std::_Destroyvector<double*int, std::allocator<int> >::end(double*, double*) [9274] 0.00 0.00 35/3 void 10 __gnu_cxx::__normal_iterator<int*, std::_Destroy_auxvector<true>int, std::__destroyallocator<double*int> > >::__normal_iterator(double*, doubleint*const&) [8843]
-----------------------------------------------
0.00 0.00 15/3 std::vector<double, std::allocator<double> >::~vector() [143] 0.00 0.00 1/3 5 void std::vector<doubleint, std::allocator<doubleint> >::_M_insert_aux<double int const&>(__gnu_cxx::__normal_iterator<doubleint*, std::vector<doubleint, std::allocator<doubleint> > >, double int const&&&) [13873] [75] 0.0 0.00 0.00 1/3 void 5 std::vector<doubleint, std::allocator<doubleint> >::_M_insert_aux<double>begin(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double&&) [13975][93] 0.0 0.00 0.00 3 void std5/10 __gnu_cxx::_Destroy__normal_iterator<doubleint*, double>(double*, double*std::vector<int, std::allocator<doubleint> > >&) [93] 0.00 0.00 3/3 void std::_Destroy<double*>__normal_iterator(double*, doubleint*const&) [9243]
-----------------------------------------------
0.00 0.00 25/2 5 main void std::vector<int, std::allocator<int> >::_M_insert_aux<int const&>(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&&&) [173][9476] 0.0 0.00 0.00 2 5 print_hlineint const&&& std::forward<int const&>(std::remove_reference<int const&>::type&) [9476]
-----------------------------------------------
0.00 0.00 2/2 4 std::_Vector_basevector<double, std::allocator<double> >::_M_deallocateend() [100] 0.00 0.00 2/4 std::vector<double*, unsigned intstd::allocator<double> >::begin() [89101][9577] 0.0 0.00 0.00 2 4 __gnu_cxx::new_allocator__normal_iterator<double*, std::vector<double, std::allocator<double> > >::deallocate__normal_iterator(double*, unsigned intconst&) [9577]
-----------------------------------------------
0.00 0.00 24/2 4 std::_Vector_basevector<double, std::allocator<double> >::_M_allocatemax_size(unsigned int) const [9979][9678] 0.0 0.00 0.00 2 4 __gnu_cxxstd::new_allocator_Vector_base<double>::allocate(unsigned int, void const*) [96] 0.00 0.00 2/6 __gnu_cxxstd::new_allocatorallocator<double> >::max_size_M_get_Tp_allocator() const [6378]
-----------------------------------------------
0.00 0.00 14/2 4 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>_M_check_len(__gnu_cxx::__normal_iterator<double*, std::vector<doubleunsigned int, std::allocator<double> > >, double char const&&&*) const [13898] [79] 0.0 0.00 0.00 1/2 void 4 std::vector<double, std::allocator<double> >::_M_insert_aux<double>max_size(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double&&) const [13979][97] 0.0 0.00 0.00 2 __gnu_cxx::__normal_iterator<double*, 4/4 std::vector_Vector_base<double, std::allocator<double> > >::difference_type __gnu_cxx::operator-<double*, std::vector<double, std::allocator<double> > >_M_get_Tp_allocator(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > > const&, __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > > ) const&) [9778] 0.00 0.00 4/8 6 __gnu_cxx::__normal_iteratornew_allocator<double*, std::vector<double, std::allocator<double> > >::basemax_size() const [5563]
-----------------------------------------------
0.00 0.00 14/2 4 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector__copy_move_a<doubletrue, std::allocator<double> > >*, double const&&&) [138] 0.00 0.00 1/2 void std::vector<double, std::allocator<double> >::_M_insert_aux<double*>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >*, double&&*) [13982][9880] 0.0 0.00 0.00 2 4 double* std::vector__copy_move<doubletrue, true, std::allocator<double> random_access_iterator_tag>::_M_check_len(unsigned int, char const*) const [98] 0.00 0.00 8/10 std::vector<double, std::allocator__copy_m<double> >::size() double const [45] 0.00 0.00 4/4 std::vector<double*, std::allocator<double> >::max_size() const [79] 0.00 0.00 2/7 unsigned int const& std::max<unsigned int>(unsigned int const&*, unsigned int const&double*) [6280]
-----------------------------------------------
0.00 0.00 14/2 4 void double* std::vectoruninitialized_copy<double, std::allocatormove_iterator<double*> >::_M_insert_aux<, double const&*>(__gnu_cxxstd::__normal_iteratormove_iterator<double*>, std::vector<double, std::allocatormove_iterator<double> > *>, double const&&&*) [13884] [81] 0.0 0.00 0.00 1/2 void std::vector<4 double, * std::allocator__uninitialized_copy<double> true>::_M_insert_aux__uninit_copy<double>(__gnu_cxxstd::__normal_iteratormove_iterator<double*>, double*>(std::vectormove_iterator<double*>, std::allocatormove_iterator<double> > *>, double&&*) [13981][99] 0.0 0.00 0.00 2 4/4 double* std::_Vector_basecopy<double, std::allocatormove_iterator<double*> , double*>::_M_allocate(unsigned int) [99] 0.00 0.00 2/2 __gnu_cxxstd::new_allocatormove_iterator<double*>, std::allocate(unsigned intmove_iterator<double*>, void constdouble*) [9687]
-----------------------------------------------
0.00 0.00 14/2 4 double* std::vector__copy_move_a2<true, double*, std::allocator<double*> >::push_back(double const&) [141] 0.00 0.00 1/2 void std::vector<*, double*, std::allocator<double> >::emplace_back<double>(double&&*) [13783][10082] 0.0 0.00 0.00 2 4 double* std::vector__copy_move_a<true, double*, std::allocator<double*> >::end(double*, double*, double*) [10082] 0.00 0.00 24/4 __gnu_cxx::__normal_iterator<double*, std::vector__copy_move<doubletrue, true, std::allocatorrandom_access_iterator_tag>::__copy_m<double> > >::__normal_iterator(doubleconst* , double const&*, double*) [7780]
-----------------------------------------------
0.00 0.00 14/2 4 void double* std::vectorcopy<double, std::allocatormove_iterator<double*> >::_M_insert_aux<, double const&*>(__gnu_cxxstd::__normal_iteratormove_iterator<double*>, std::vectormove_iterator<double, std::allocator<double> > *>, double const&&&*) [13887] [83] 0.0 0.00 0.00 1/2 void 4 double* std::vector__copy_move_a2<true, double*, std::allocator<double> >::_M_insert_aux<double*>(__gnu_cxx::__normal_iterator<double*, std::vector<double*, std::allocator<double> > >, double&&*) [13983][101] 0.0 0.00 0.00 2 12/12 std::vector_Niter_base<double, *>::iterator_type std::allocator__niter_base<double*> >::begin(double*) [10142] 0.00 0.00 24/4 __gnu_cxx::__normal_iterator<double*, std::vector__copy_move_a<true, double*, std::allocator<double*> > >::__normal_iterator(double* const&, double*, double*) [7782]
-----------------------------------------------
0.00 0.00 14/1 4 __do_global_ctors_aux double* std::__uninitialized_copy_a<std::move_iterator<double*>, double*, double>(std::move_iterator<double*>, std::move_iterator<double*>, double*, std::allocator<double>&) [30285][10284] 0.0 0.00 0.00 1 4 _GLOBAL__sub_I__Z2TTd double* std::uninitialized_copy<std::move_iterator<double*>, double*>(std::move_iterator<double*>, std::move_iterator<double*>, double*) [10284] 0.00 0.00 14/1 4 __static_initialization_and_destruction_0double* std::__uninitialized_copy<true>::__uninit_copy<std::move_iterator<double*>, double*>(intstd::move_iterator<double*>, std::move_iterator<double*>, intdouble*) [10581]
-----------------------------------------------
0.00 0.00 14/1 4 main double* std::__uninitialized_move_a<double*, double*, std::allocator<double> >(double*, double*, double*, std::allocator<double>&) [186][10385] 0.0 0.00 0.00 1 4 JDdouble* std::__uninitialized_copy_a<std::move_iterator<double*>, double*, double>(tmstd::move_iterator<double*>, std::move_iterator<double*>, double*, std::allocator<double>&) [85] 0.00 0.00 4/4 double* std::uninitialized_copy<std::move_iterator<double*>, double*>(std::move_iterator<double*>, std::move_iterator<double*>, double*) [10384]
-----------------------------------------------
0.00 0.00 12/1 4 __static_initialization_and_destruction_0void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) [138] 0.00 0.00 2/4 void std::vector<double, std::allocator<double> >::_M_insert_aux<double>(int__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, intdouble&&) [105139][10486] 0.0 0.0 0.00 4 double* std::__uninitialized_move_a<double*, double*, std::allocator<double> >(double*, double*, double*, std::allocator<double>&) [86] 0.00 0.00 8/8 std::move_iterator<double*> std::make_move_iterator<double*>(double* const&) [60] 0.00 0.00 1 TT4/4 double* std::__uninitialized_copy_a<std::move_iterator<double*>, double*, double>(std::move_iterator<double*>, std::move_iterator<double*>, double*, std::allocator<double>&) [10485]
-----------------------------------------------
0.00 0.00 14/1 4 _GLOBAL__sub_I__Z2TTd double* std::__uninitialized_copy<true>::__uninit_copy<std::move_iterator<double*>, double*>(std::move_iterator<double*>, std::move_iterator<double*>, double*) [10281][10587] 0.0 0.00 0.00 1 4 __static_initialization_and_destruction_0double* std::copy<std::move_iterator<double*>, double*>(intstd::move_iterator<double*>, std::move_iterator<double*>, intdouble*) [10587] 0.00 0.00 14 8/14 cobject8 std::_Miter_base<std::move_iterator<double*> >::iterator_type std::__miter_base<std::cobjectmove_iterator<double*> >(std::move_iterator<double*>) [3759] 0.00 0.00 14/1 4 TTdouble* std::__copy_move_a2<true, double*, double*>(double*, double*, double*) [10483]
-----------------------------------------------
0.00 0.00 13/1 3 void std::allocator_Destroy<std::stringdouble*>::allocator(double*, double*) [11492][10688] 0.0 0.00 0.00 1 3 __gnu_cxxvoid std::new_allocator_Destroy_aux<stdtrue>::string__destroy<double*>::new_allocator(double*, double*) [10688]
-----------------------------------------------
0.00 0.00 1/3 std::_Vector_base<double, std::allocator<double> >::~_Vector_base() [130] 0.00 0.00 1 /3 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::stringallocator<double> > >, double const&&&) [138] 0.00 0.00 1/3 void std::vector<double, std::~allocator<double> >::_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double&&) [115139][10789] 0.0 0.00 0.00 1 3 __gnu_cxxstd::new_allocator_Vector_base<double, std::stringallocator<double> >::~_M_deallocate(double*, unsigned int) [89] 0.00 0.00 2/2 __gnu_cxx::new_allocator<double>::deallocate(double*, unsigned int) [10795]
-----------------------------------------------
0.00 0.00 13/1 3 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) main [1381][10890] 0.0 0.00 0.00 1 3 __gnu_cxxstd::vector<double, std::new_allocatorallocator<double> >::construct(double*, double const&) operator[108] 0.00 0.00 1/16 operator new(unsigned int, void*) [3490]
-----------------------------------------------
0.00 0.00 1/1 3 void std::vector<double, std::allocator<double> >::_M_insert_auxemplace_back<double>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double&&) [139137][109] 0.0 0.00 0.00 1 /3 void __gnu_cxx::new_allocator<double>::construct<double>(double*, double&&) [109] 0.00 0.00 1/3 void std::vector<double&& , std::forwardallocator<double> >::_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*, std::remove_referencevector<double>, std::typeallocator<double> > >, double&&) [139][91] 0.0 0.00 0.00 1/16 operator new3 double&& std::forward<double>(unsigned int, void*std::remove_reference<double>::type&) [3491]
-----------------------------------------------
0.00 0.00 13/1 3 void std::allocator_Destroy<double*, double>(double*, double*, std::allocator(<double>&) [11693][11092] 0.0 0.00 0.00 1 3 __gnu_cxxvoid std::new_allocator_Destroy<double*>(double*, double*) [92] 0.00 0.00 3/3 void std::new_allocator_Destroy_aux<true>::__destroy<double*>(double*, double*) [11088]
-----------------------------------------------
0.00 0.00 1/3 std::vector<double, std::allocator<double> >::~vector() [143] 0.00 0.00 1 /3 void std::vector<double, std::allocator<double>>::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) [138] 0.00 0.00 1/3 void std::vector<double, std::~allocator<double> >::_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double&&) [117139][11193] 0.0 0.00 0.00 1 3 __gnu_cxxvoid std::_Destroy<double*, double>(double*, double*, std::new_allocatorallocator<double>&) [93] 0.00 0.00 3/3 void std::~new_allocator_Destroy<double*>(double*, double*) [11192]
-----------------------------------------------
0.00 0.00 12/1 2 std::allocator<int>::allocator() main [1181][11294] 0.0 0.00 0.00 1 2 __gnu_cxx::new_allocator<int>::new_allocatorprint_hline() [11294]
-----------------------------------------------
0.00 0.00 12/1 2 std::_Vector_base<double, std::allocator<intdouble> >::~allocator_M_deallocate(double*, unsigned int) [11989][11395] 0.0 0.00 0.00 1 2 __gnu_cxx::new_allocator<intdouble>::~new_allocatordeallocate(double*, unsigned int) [11395]
-----------------------------------------------
0.00 0.00 12/1 2 std::_Vector_base<std::stringdouble, std::allocator<std::stringdouble> >::_Vector_impl::_Vector_impl_M_allocate(unsigned int) [12199][11496] 0.0 0.00 0.00 1 2 std__gnu_cxx::allocatornew_allocator<std::stringdouble>::allocatorallocate(unsigned int, void const*) [11496] 0.00 0.00 12/1 6 __gnu_cxx::new_allocator<std::stringdouble>::new_allocatormax_size() const [10663]
-----------------------------------------------
0.00 0.00 1/1 2 void std::_Vector_basevector<double, std::stringallocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) [138] 0.00 0.00 1/2 void std::vector<double, std::stringallocator<double> >::_Vector_impl_M_insert_aux<double>(__gnu_cxx::~_Vector_impl(__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double&&) [122139][11597] 0.0 0.00 0.00 1 2 __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >::difference_type __gnu_cxx::operator-<double*, std::stringvector<double, std::allocator<double>> >(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::~allocator(<double> > > const&, __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > > const&) [11597] 0.00 0.00 14/1 8 __gnu_cxx::new_allocator__normal_iterator<double*, std::vector<double, std::stringallocator<double> > >::~new_allocatorbase() const [10755]
-----------------------------------------------
0.00 0.00 1/2 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) [138] 0.00 0.00 1 /2 void std::_Vector_basevector<double, std::allocator<double> >::_Vector_impl_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*, std::_Vector_impl(vector<double, std::allocator<double> > >, double&&) [127139][11698] 0.0 0.00 0.00 1 2 std::vector<double, std::allocator<double>>::_M_check_len(unsigned int, char const*) const [98] 0.00 0.00 8/10 std::vector<double, std::allocator<double> >::size() const [11645] 0.00 0.00 14/1 4 __gnu_cxxstd::vector<double, std::new_allocatorallocator<double> >::new_allocatormax_size() const [79] 0.00 0.00 2/7 unsigned int const& std::max<unsigned int>(unsigned int const&, unsigned int const&) [11062]
-----------------------------------------------
0.00 0.00 1/2 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) [138] 0.00 0.00 1 /2 void std::_Vector_basevector<double, std::allocator<double> >::_Vector_impl_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::~_Vector_impl(allocator<double> > >, double&&) [128139][11799] 0.0 0.00 0.00 1 2 std::_Vector_base<double, std::allocator<double> >::~allocator_M_allocate(unsigned int) [11799] 0.00 0.00 12/1 2 __gnu_cxx::new_allocator<double>::~new_allocatorallocate(unsigned int, void const*) [11196]
-----------------------------------------------
0.00 0.00 1/1 2 std::_Vector_basevector<intdouble, std::allocator<intdouble> >::_Vector_implpush_back(double const&) [141] 0.00 0.00 1/2 void std::vector<double, std::_Vector_implallocator<double> >::emplace_back<double>(double&&) [131137][118100] 0.0 0.00 0.00 1 2 std::vector<double, std::allocator<intdouble> >::allocatorend() [118100] 0.00 0.00 12/1 4 __gnu_cxx::new_allocator__normal_iterator<intdouble*, std::vector<double, std::allocator<double> > >::new_allocator__normal_iterator(double* const&) [11277]
-----------------------------------------------
0.00 0.00 1/2 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) [138] 0.00 0.00 1 /2 void std::_Vector_basevector<intdouble, std::allocator<intdouble> > ::_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*, std::_Vector_implvector<double, std::~_Vector_impl(allocator<double> > >, double&&) [132139][119101] 0.0 0.00 0.00 1 2 std::vector<double, std::allocator<intdouble> >::~allocatorbegin() [119101] 0.00 0.00 12/1 4 __gnu_cxx::new_allocator__normal_iterator<intdouble*, std::vector<double, std::allocator<double> > >::~new_allocator__normal_iterator(double* const&) [11377]
-----------------------------------------------
0.00 0.00 1/1 void std::_Destroy<std::string__do_global_ctors_aux [302][102] 0.0 0.00 0.00 1 _GLOBAL__sub_I__Z2TTd [102] 0.00 0.00 1/1 __static_initialization_and_destruction_0(int, int) [105]----------------------------------------------- 0.00 0.00 1/1 main [1][103] 0.0 0.00 0.00 1 JD(tm*>) [103]----------------------------------------------- 0.00 0.00 1/1 __static_initialization_and_destruction_0(std::string*int, std::string*int) [150105][120104] 0.0 0.00 0.00 1 void std::_Destroy_aux<false>::__destroy<std::string*>TT(double) [104]----------------------------------------------- 0.00 0.00 1/1 _GLOBAL__sub_I__Z2TTd [102][105] 0.0 0.00 0.00 1 __static_initialization_and_destruction_0(std::string*int, stdint) [105] 0.00 0.00 14/14 cobject::string*cobject() [37] 0.00 0.00 1/1 TT(double) [120104]
-----------------------------------------------
0.00 0.00 1/1 std::_Vector_base<std::string, std::allocator<std::string> >::_Vector_base() [125]
[121] 0.0 0.00 0.00 1 std::_Vector_base<std::string, std::allocator<std::string> >::_Vector_impl::_Vector_impl() [121]
0.00 0.00 1/1 std::allocator<std::string>::allocator() [114]
[106] 0.0 0.00 0.00 1 __gnu_cxx::new_allocator<std::string>::new_allocator() [106]
-----------------------------------------------
0.00 0.00 1/1 std::_Vector_base<std::string, std::allocator<std::string> >::~_Vector_base() [126]
[122] 0.0 0.00 0.00 1 std::_Vector_base<std::string, std::allocator<std::string> >::_Vector_impl::~_Vector_impl() [122]
0.00 0.00 1/1 std::allocator<std::string>::~allocator() [115]
[107] 0.0 0.00 0.00 1 __gnu_cxx::new_allocator<std::string>::~new_allocator() [107]
-----------------------------------------------
0.00 0.00 1/1 void std::_Vector_basevector<double, std::stringallocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::allocatorvector<double, std::stringallocator<double> >::~_Vector_base(>, double const&&&) [126138][123108] 0.0 0.00 0.00 1 std::_Vector_base<std::string, std__gnu_cxx::allocatornew_allocator<std::string> double>::_M_deallocateconstruct(std::stringdouble*, double const&) [108] 0.00 0.00 1/16 operator new(unsigned int, void*) [12334]
-----------------------------------------------
0.00 0.00 1/1 void std::vector<double, std::stringallocator<double> >::_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*, std::allocatorvector<double, std::stringallocator<double> > >::~vector(, double&&) [136139][124109] 0.0 0.00 0.00 1 stdvoid __gnu_cxx::_Vector_basenew_allocator<stddouble>::stringconstruct<double>(double*, double&&) [109] 0.00 0.00 1/3 double&& std::allocatorforward<double>(std::string> remove_reference<double>::_M_get_Tp_allocatortype&) [91] 0.00 0.00 1/16 operator new(unsigned int, void*) [12434]
-----------------------------------------------
0.00 0.00 1/1 std::vector<std::string, std::allocator<std::string> double>::vectorallocator() [135116][125110] 0.0 0.00 0.00 1 std::_Vector_base<std::string, std::allocator<std::string> >::_Vector_base() [125] 0.00 0.00 1/1 std::_Vector_base<std::string, std__gnu_cxx::allocatornew_allocator<std::string> double>::_Vector_impl::_Vector_implnew_allocator() [121110]
-----------------------------------------------
0.00 0.00 1/1 std::vector<std::string, std::allocator<std::string> >::~vector() [136]
[126] 0.0 0.00 0.00 1 std::_Vector_base<std::string, std::allocator<std::string> >::~_Vector_base() [126]
0.00 0.00 1/1 std::_Vector_base<std::string, std::allocator<std::string> >::_M_deallocate(std::string*, unsigned int) [123]
0.00 0.00 1/1 std::_Vector_base<std::string, std::allocator<std::string> >::_Vector_impl::~_Vector_impl() [122]
-----------------------------------------------
0.00 0.00 1/1 std::_Vector_base<double, std::allocator<double> >::_Vector_base() [129]
[127] 0.0 0.00 0.00 1 std::_Vector_base<double, std::allocator<double> >::_Vector_impl::_Vector_impl() [127]
0.00 0.00 1/1 std::allocator<double>::allocator() [116]
-----------------------------------------------
0.00 0.00 1/1 std::_Vector_base<double, std::allocator<double> >::~_Vector_base() [130]
[128] 0.0 0.00 0.00 1 std::_Vector_base<double, std::allocator<double> >::_Vector_impl::~_Vector_impl() [128]
0.00 0.00 1/1 std::allocator<double>::~allocator() [117]
[111] 0.0 0.00 0.00 1 __gnu_cxx::new_allocator<double>::~new_allocator() [111]
-----------------------------------------------
0.00 0.00 1/1 std::vector<double, std::allocator<double> >::vector() [142]
[129] 0.0 0.00 0.00 1 std::_Vector_base<double, std::allocator<double> >::_Vector_base() [129]
0.00 0.00 1/1 std::_Vector_base<double, std::allocator<double> >::_Vector_impl::_Vector_impl() [127]
-----------------------------------------------
0.00 0.00 1/1 std::vector<double, std::allocator<double> >::~vector() [143]
[130] 0.0 0.00 0.00 1 std::_Vector_base<double, std::allocator<double> >::~_Vector_base() [130]
0.00 0.00 1/3 std::_Vector_base<double, std::allocator<double> >::_M_deallocate(double*, unsigned int) [89]
0.00 0.00 1/1 std::_Vector_base<double, std::allocator<double> >::_Vector_impl::~_Vector_impl() [128]
-----------------------------------------------
0.00 0.00 1/1 std::_Vector_base<int, std::allocator<int> >::_Vector_base() [133]
[131] 0.0 0.00 0.00 1 std::_Vector_base<int, std::allocator<int> >::_Vector_impl::_Vector_impl() [131]
0.00 0.00 1/1 std::allocator<int>::allocator() [118]
[112] 0.0 0.00 0.00 1 __gnu_cxx::new_allocator<int>::new_allocator() [112]
-----------------------------------------------
0.00 0.00 1/1 std::_Vector_base<int, std::allocator<int> >::~_Vector_base() [134]
[132] 0.0 0.00 0.00 1 std::_Vector_base<int, std::allocator<int> >::_Vector_impl::~_Vector_impl() [132]
0.00 0.00 1/1 std::allocator<int>::~allocator() [119]
[113] 0.0 0.00 0.00 1 __gnu_cxx::new_allocator<int>::~new_allocator() [113]
-----------------------------------------------
0.00 0.00 1/1 std::_Vector_base<std::string, std::allocator<std::string> >::_Vector_impl::_Vector_impl() [121]
[114] 0.0 0.00 0.00 1 std::allocator<std::string>::allocator() [114]
0.00 0.00 1/1 __gnu_cxx::new_allocator<std::string>::new_allocator() [106]
-----------------------------------------------
0.00 0.00 1/1 std::_Vector_base<std::string, std::allocator<std::string> >::_Vector_impl::~_Vector_impl() [122]
[115] 0.0 0.00 0.00 1 std::allocator<std::string>::~allocator() [115]
0.00 0.00 1/1 __gnu_cxx::new_allocator<std::string>::~new_allocator() [107]
-----------------------------------------------
0.00 0.00 1/1 std::_Vector_base<double, std::allocator<double> >::_Vector_impl::_Vector_impl() [127]
[116] 0.0 0.00 0.00 1 std::allocator<double>::allocator() [116]
0.00 0.00 1/1 __gnu_cxx::new_allocator<double>::new_allocator() [110]
-----------------------------------------------
0.00 0.00 1/1 std::_Vector_base<double, std::allocator<double> >::_Vector_impl::~_Vector_impl() [128]
[117] 0.0 0.00 0.00 1 std::allocator<double>::~allocator() [117]
0.00 0.00 1/1 __gnu_cxx::new_allocator<double>::~new_allocator() [111]
-----------------------------------------------
0.00 0.00 1/1 std::vector<int, std::allocator<int> >::vector() [144]
[133] 0.0 0.00 0.00 1 std::_Vector_base<int, std::allocator<int> >::_Vector_base() [133]
0.00 0.00 1/1 std::_Vector_base<int, std::allocator<int> >::_Vector_impl::_Vector_impl() [131]
[118] 0.0 0.00 0.00 1 std::allocator<int>::allocator() [118]
0.00 0.00 1/1 __gnu_cxx::new_allocator<int>::new_allocator() [112]
-----------------------------------------------
0.00 0.00 1/1 std::vector<int, std::allocator<int> >::~vector() [145]
[134] 0.0 0.00 0.00 1 std::_Vector_base<int, std::allocator<int> >::~_Vector_base() [134]
0.00 0.00 1/6 std::_Vector_base<int, std::allocator<int> >::_M_deallocate(int*, unsigned int) [65]
0.00 0.00 1/1 std::_Vector_base<int, std::allocator<int> >::_Vector_impl::~_Vector_impl() [132]
[119] 0.0 0.00 0.00 1 std::allocator<int>::~allocator() [119]
0.00 0.00 1/1 __gnu_cxx::new_allocator<int>::~new_allocator() [113]
-----------------------------------------------
0.00 0.00 1/1 void std::_Destroy<std::string*>(std::string*, std::string*) [150]
[120] 0.0 0.00 0.00 1 void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) [120]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[135] 0.0 0.00 0.00 1 std::vector<std::string, std::allocator<std::string> >::vector() [135]
0.00 0.00 1/1 std::_Vector_base<std::string, std::allocator<std::string> >::_Vector_base() [125]
[121] 0.0 0.00 0.00 1 std::_Vector_base<std::string, std::allocator<std::string> >::_Vector_impl::_Vector_impl() [121]
0.00 0.00 1/1 std::allocator<std::string>::allocator() [114]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[136] 0.0 0.00 0.00 1 std::vector<std::string, std::allocator<std::string> >::~vector() [136]
0.00 0.00 1/1 std::_Vector_base<std::string, std::allocator<std::string> >::_M_get_Tp_allocator() [124]
0.00 0.00 1/1 void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) [151]
0.00 0.00 1/1 std::_Vector_base<std::string, std::allocator<std::string> >::~_Vector_base() [126]
[122] 0.0 0.00 0.00 1 std::_Vector_base<std::string, std::allocator<std::string> >::_Vector_impl::~_Vector_impl() [122]
0.00 0.00 1/1 std::allocator<std::string>::~allocator() [115]
-----------------------------------------------
0.00 0.00 1/1 std::vector_Vector_base<doublestd::string, std::allocator<doublestd::string> >::push_back~_Vector_base(double&&) [140126][137123] 0.0 0.00 0.00 1 void std::vector_Vector_base<doublestd::string, std::allocator<double> >std::emplace_back<doublestring> >(double&&) [137] 0.00 0.00 1/3 double&& std::forward<double>_M_deallocate(std::remove_reference<double>::type&string*, unsigned int) [91123]----------------------------------------------- 0.00 0.00 1/2 1 std::vector<doublestd::string, std::allocator<doublestd::string> >::end~vector() [100136] [124] 0.0 0.00 0.00 1/1 void std::vector_Vector_base<double, std::allocator<double> >::_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*string, std::vectorallocator<double, std::allocator<doublestring> > >, double&&::_M_get_Tp_allocator() [139124]
-----------------------------------------------
0.00 0.00 1/1 std::vector<double, std::allocator<double> >::push_back(double const&) [141][138] 0.0 0.00 0.00 1 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<doublestring, std::allocator<double> > >, double const&&&) [138] 0.00 0.00 3/7 std::_Vector_base<double, std::allocator<doublestring> >::_M_get_Tp_allocator() [61] 0.00 0.00 2/8 __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >::base() const [55135] 0.00 0.00 2/4 double* std::__uninitialized_move_a<double*, double*, std::allocator<double> >(double*, double*, double*, std::allocator<double>&) [86125] 0.00 0.00 1/2 std::vector<double, std::allocator<double> >::_M_check_len(unsigned int, char const*) const [98] 0.00 0.00 1/2 std::vector<double, std::allocator<double> >::begin() [101] 0.00 0.00 1/2 __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >::difference_type __gnu_cxx::operator-_Vector_base<double*, std::vector<doublestring, std::allocator<double> > >(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > > const&, __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> string> > const&) [97] 0.00 0.00 1/2 std::_Vector_base<double, std::allocator<double> >::_M_allocate(unsigned int) [99125] 0.00 0.00 1/1 double const&&& std::forward_Vector_base<double const&>(std::remove_reference<double const&>::type&) [149] 0.00 0.00 1/1 __gnu_cxx::new_allocator<double>::construct(double*string, double const&) [108] 0.00 0.00 1/3 void std::_Destroyallocator<double*, double>(double*, double*, std::allocator<doublestring> >&) [93] 0.00 0.00 1/3 std::_Vector_base<double, std::allocator<double> >_Vector_impl::_M_deallocate_Vector_impl(double*, unsigned int) [89121]
-----------------------------------------------
0.00 0.00 1/1 void std::vector<double, std::allocator<double> >::emplace_back<double>(double&&) [137][139] 0.0 0.00 0.00 1 void std::vector<doublestring, std::allocator<double> >::_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double&&) [139] 0.00 0.00 3/7 std::_Vector_base<double, std::allocator<doublestring> >::_M_get_Tp_allocator() [61] 0.00 0.00 2/8 __gnu_cxx::__normal_iterator<double*, std::~vector<double, std::allocator<double> > >::base() const [55136] 0.00 0.00 2/4 double* std::__uninitialized_move_a<double*, double*, std::allocator<double> >(double*, double*, double*, std::allocator<double>&) [86126] 0.00 0.00 1/2 std::vector<double, std::allocator<double> >::_M_check_len(unsigned int, char const*) const [98] 0.00 0.00 1/2 std::vector<double, std::allocator<double> >::begin() [101] 0.00 0.00 1/2 __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >::difference_type __gnu_cxx::operator-_Vector_base<double*, std::vector<doublestring, std::allocator<double> > >(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> string> > const&, __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > > const&~_Vector_base() [97126] 0.00 0.00 1/2 1 std::_Vector_base<double, std::allocator<double> >::_M_allocate(unsigned int) [99] 0.00 0.00 1/3 double&& string, std::forwardallocator<double>(std::remove_reference<doublestring>::type&) [91] 0.00 0.00 1/1 void __gnu_cxx::new_allocator<double>::construct<double>_M_deallocate(double*, double&&) [109] 0.00 0.00 1/3 void std::_Destroy<doublestring*, double>(double*, double*, std::allocator<double>&unsigned int) [93123] 0.00 0.00 1/3 1 std::_Vector_base<double, std::allocator<double> >::_M_deallocate(double*, unsigned int) [89]----------------------------------------------- 0.00 0.00 1/1 main [1][140] 0.0 0.00 0.00 1 std::vector<doublestring, std::allocator<double> >::push_back(double&&) [140] 0.00 0.00 1/1 std::remove_reference<double&string>::type&& std::move<double&>(double&&&) [148] 0.00 0.00 1/1 void std::vector<double, std_Vector_impl::allocator<double> >::emplace_back<double>~_Vector_impl(double&&) [137122]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[141] 0.0 0.00 0.00 1 std::vector<double, std::allocator<double> >::push_back(double const&) [141]
0.00 0.00 1/2 std::vector<double, std::allocator<double> >::end() [100]
0.00 0.00 1/1 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) [138]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[142] 0.0 0.00 0.00 1 std::vector<double, std::allocator<double> >::vector() [142]
0.00 0.00 1/1 std::_Vector_base<double, std::allocator<double> >::_Vector_base() [129]
[127] 0.0 0.00 0.00 1 std::_Vector_base<double, std::allocator<double> >::_Vector_impl::_Vector_impl() [127]
0.00 0.00 1/1 std::allocator<double>::allocator() [116]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[143] 0.0 0.00 0.00 1 std::vector<double, std::allocator<double> >::~vector() [143]
0.00 0.00 1/7 std::_Vector_base<double, std::allocator<double> >::_M_get_Tp_allocator() [61]
0.00 0.00 1/3 void std::_Destroy<double*, double>(double*, double*, std::allocator<double>&) [93]
0.00 0.00 1/1 std::_Vector_base<double, std::allocator<double> >::~_Vector_base() [130]
[128] 0.0 0.00 0.00 1 std::_Vector_base<double, std::allocator<double> >::_Vector_impl::~_Vector_impl() [128]
0.00 0.00 1/1 std::allocator<double>::~allocator() [117]
-----------------------------------------------
0.00 0.00 1/1 std::vector<double, std::allocator<double> >::vector() [142]
[129] 0.0 0.00 0.00 1 std::_Vector_base<double, std::allocator<double> >::_Vector_base() [129]
0.00 0.00 1/1 std::_Vector_base<double, std::allocator<double> >::_Vector_impl::_Vector_impl() [127]
-----------------------------------------------
0.00 0.00 1/1 std::vector<double, std::allocator<double> >::~vector() [143]
[130] 0.0 0.00 0.00 1 std::_Vector_base<double, std::allocator<double> >::~_Vector_base() [130]
0.00 0.00 1/3 std::_Vector_base<double, std::allocator<double> >::_M_deallocate(double*, unsigned int) [89]
0.00 0.00 1/1 std::_Vector_base<double, std::allocator<double> >::_Vector_impl::~_Vector_impl() [128]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[144] 0.0 0.00 0.00 1 std::vector<int, std::allocator<int> >::vector() [144]
0.00 0.00 1/1 std::_Vector_base<int, std::allocator<int> >::_Vector_base() [133]
[131] 0.0 0.00 0.00 1 std::_Vector_base<int, std::allocator<int> >::_Vector_impl::_Vector_impl() [131]
0.00 0.00 1/1 std::allocator<int>::allocator() [118]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[145] 0.0 0.00 0.00 1 std::vector<int, std::allocator<int> >::~vector() [145]
0.00 0.00 1/16 std::_Vector_base<int, std::allocator<int> >::_M_get_Tp_allocator() [32]
0.00 0.00 1/6 void std::_Destroy<int*, int>(int*, int*, std::allocator<int>&) [67]
0.00 0.00 1/1 std::_Vector_base<int, std::allocator<int> >::~_Vector_base() [134]
[132] 0.0 0.00 0.00 1 std::_Vector_base<int, std::allocator<int> >::_Vector_impl::~_Vector_impl() [132]
0.00 0.00 1/1 std::allocator<int>::~allocator() [119]
-----------------------------------------------
0.00 0.00 1/1 std::vector<int, std::allocator<int> >::vector() [144]
[133] 0.0 0.00 0.00 1 std::_Vector_base<int, std::allocator<int> >::_Vector_base() [133]
0.00 0.00 1/1 std::_Vector_base<int, std::allocator<int> >::_Vector_impl::_Vector_impl() [131]
-----------------------------------------------
0.00 0.00 1/1 std::vector<int, std::allocator<int> >::~vector() [145]
[134] 0.0 0.00 0.00 1 std::_Vector_base<int, std::allocator<int> >::~_Vector_base() [134]
0.00 0.00 1/6 std::_Vector_base<int, std::allocator<int> >::_M_deallocate(int*, unsigned int) [65]
0.00 0.00 1/1 std::_Vector_base<int, std::allocator<int> >::_Vector_impl::~_Vector_impl() [132]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[146135] 0.0 0.00 0.00 1 std::ios_base::precision(int) [146]----------------------------------------------- 0.00 0.00 1/1 dowork(double) [3][147] 0.0 0.00 0.00 1 vector<std::abs(double) [147]----------------------------------------------- 0.00 0.00 1/1 std::vector<doublestring, std::allocator<double> >::push_back(double&&) [140][148] 0.0 0.00 0.00 1 std::remove_reference<double&string> >::type&& std::move<double&>vector(double&&&) [148135]----------------------------------------------- 0.00 0.00 1/1 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator_Vector_base<double*, std::vector<doublestring, std::allocator<double> > >, double const&&&) [138][149] 0.0 0.00 0.00 1 double const&&& std::forward<double const&string>(std::remove_reference<double const&>::type&_Vector_base() [149125]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[136] 0.0 0.00 0.00 1 std::vector<std::string, std::allocator<std::string> >::~vector() [136]
0.00 0.00 1/1 std::_Vector_base<std::string, std::allocator<std::string> >::_M_get_Tp_allocator() [124]
0.00 0.00 1/1 void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) [151]
[150] 0.0 0.00 0.00 1 void /1 std::_Destroy_Vector_base<std::string*>(std::string*, std::string*) [150] 0.00 0.00 1/1 void std::_Destroy_aux<false>::__destroyallocator<std::string*>(std>::string*, std::string*~_Vector_base() [120126]
-----------------------------------------------
0.00 0.00 1/1 std::vector<double, std::allocator<double> >::push_back(double&&) [140][137] 0.0 0.00 0.00 1 void std::vector<double, std::allocator<double> >::emplace_back<double>(double&&) [137] 0.00 0.00 1/3 double&& std::forward<double>(std::remove_reference<double>::type&) [91] 0.00 0.00 1/2 std::vector<double, std::allocator<double> >::end() [100] 0.00 0.00 1/1 void std::vector<double, std::allocator<double> >::_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double&&) [139]----------------------------------------------- 0.00 0.00 1/1 std::vector<double, std::allocator<double> >::push_back(double const&) [141][138] 0.0 0.00 0.00 1 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) [138] 0.00 0.00 3/7 std::_Vector_base<double, std::allocator<double> >::_M_get_Tp_allocator() [61] 0.00 0.00 2/8 __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >::base() const [55] 0.00 0.00 2/4 double* std::__uninitialized_move_a<double*, double*, std::allocator<double> >(double*, double*, double*, std::allocator<double>&) [86] 0.00 0.00 1/2 std::vector<double, std::allocator<double> >::_M_check_len(unsigned int, char const*) const [98] 0.00 0.00 1/2 std::vector<double, std::allocator<double> >::begin() [101] 0.00 0.00 1/2 __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >::difference_type __gnu_cxx::operator-<double*, std::vector<double, std::allocator<double> > >(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > > const&, __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > > const&) [97] 0.00 0.00 1/2 std::_Vector_base<double, std::allocator<double> >::_M_allocate(unsigned int) [99] 0.00 0.00 1/1 double const&&& std::forward<double const&>(std::remove_reference<double const&>::type&) [149] 0.00 0.00 1/1 __gnu_cxx::new_allocator<double>::construct(double*, double const&) [108] 0.00 0.00 1/3 void std::_Destroy<double*, double>(double*, double*, std::allocator<double>&) [93] 0.00 0.00 1/3 std::_Vector_base<double, std::allocator<double> >::_M_deallocate(double*, unsigned int) [89]----------------------------------------------- 0.00 0.00 1/1 void std::vector<double, std::allocator<double> >::emplace_back<double>(double&&) [137][139] 0.0 0.00 0.00 1 void std::vector<double, std::allocator<double> >::_M_insert_aux<double>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double&&) [139] 0.00 0.00 3/7 std::_Vector_base<double, std::allocator<double> >::_M_get_Tp_allocator() [61] 0.00 0.00 2/8 __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >::base() const [55] 0.00 0.00 2/4 double* std::__uninitialized_move_a<double*, double*, std::allocator<double> >(double*, double*, double*, std::allocator<double>&) [86] 0.00 0.00 1/2 std::vector<double, std::allocator<double> >::_M_check_len(unsigned int, char const*) const [98] 0.00 0.00 1/2 std::vector<double, std::allocator<double> >::begin() [101] 0.00 0.00 1/2 __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >::difference_type __gnu_cxx::operator-<double*, std::vector<double, std::allocator<double> > >(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > > const&, __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > > const&) [97] 0.00 0.00 1/2 std::_Vector_base<double, std::allocator<double> >::_M_allocate(unsigned int) [99] 0.00 0.00 1/3 double&& std::forward<double>(std::remove_reference<double>::type&) [91] 0.00 0.00 1/1 void __gnu_cxx::new_allocator<double>::construct<double>(double*, double&&) [109] 0.00 0.00 1/3 void std::_Destroy<double*, double>(double*, double*, std::allocator<double>&) [93] 0.00 0.00 1/3 std::_Vector_base<double, std::allocator<double> >::_M_deallocate(double*, unsigned int) [89]----------------------------------------------- 0.00 0.00 1/1 main [1][140] 0.0 0.00 0.00 1 std::vector<double, std::allocator<double> >::push_back(double&&) [140] 0.00 0.00 1/1 std::remove_reference<double&>::type&& std::move<double&>(double&&&) [148] 0.00 0.00 1/1 void std::vector<double, std::allocator<double> >::emplace_back<double>(double&&) [137]----------------------------------------------- 0.00 0.00 1/1 main [1][141] 0.0 0.00 0.00 1 std::vector<double, std::allocator<double> >::push_back(double const&) [141] 0.00 0.00 1/2 std::vector<double, std::allocator<double> >::end() [100] 0.00 0.00 1/1 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) [138]----------------------------------------------- 0.00 0.00 1/1 main [1][142] 0.0 0.00 0.00 1 std::vector<double, std::allocator<double> >::vector() [142] 0.00 0.00 1/1 std::_Vector_base<double, std::allocator<double> >::_Vector_base() [129]----------------------------------------------- 0.00 0.00 1/1 main [1][143] 0.0 0.00 0.00 1 std::vector<double, std::allocator<double> >::~vector() [143] 0.00 0.00 1/7 std::_Vector_base<double, std::allocator<double> >::_M_get_Tp_allocator() [61] 0.00 0.00 1/3 void std::_Destroy<double*, double>(double*, double*, std::allocator<double>&) [93] 0.00 0.00 1/1 std::_Vector_base<double, std::allocator<double> >::~_Vector_base() [130]----------------------------------------------- 0.00 0.00 1/1 main [1][144] 0.0 0.00 0.00 1 std::vector<int, std::allocator<int> >::vector() [144] 0.00 0.00 1/1 std::_Vector_base<int, std::allocator<int> >::_Vector_base() [133]----------------------------------------------- 0.00 0.00 1/1 main [1][145] 0.0 0.00 0.00 1 std::vector<int, std::allocator<int> >::~vector() [145] 0.00 0.00 1/16 std::_Vector_base<int, std::allocator<int> >::_M_get_Tp_allocator() [32] 0.00 0.00 1/6 void std::_Destroy<int*, int>(int*, int*, std::allocator<int>&) [67] 0.00 0.00 1/1 std::_Vector_base<int, std::allocator<int> >::~_Vector_base() [134]----------------------------------------------- 0.00 0.00 1/1 main [1][146] 0.0 0.00 0.00 1 std::ios_base::precision(int) [146]----------------------------------------------- 0.00 0.00 1/1 dowork(double) [3][147] 0.0 0.00 0.00 1 std::abs(double) [147]----------------------------------------------- 0.00 0.00 1/1 std::vector<double, std::allocator<double> >::push_back(double&&) [140][148] 0.0 0.00 0.00 1 std::remove_reference<double&>::type&& std::move<double&>(double&&&) [148]----------------------------------------------- 0.00 0.00 1/1 void std::vector<double, std::allocator<double> >::_M_insert_aux<double const&>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&&&) [138][149] 0.0 0.00 0.00 1 double const&&& std::forward<double const&>(std::remove_reference<double const&>::type&) [149]----------------------------------------------- 0.00 0.00 1/1 void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) [151][150] 0.0 0.00 0.00 1 void std::_Destroy<std::string*>(std::string*, std::string*) [150] 0.00 0.00 1/1 void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) [120]----------------------------------------------- 0.00 0.00 1/1 std::vector<std::string, std::allocator<std::string> >::~vector() [136][151] 0.0 0.00 0.00 1 void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) [151] 0.00 0.00 1/1 void std::_Destroy<std::string*>(std::string*, std::string*) [150]
-----------------------------------------------
This table describes the call tree of the program, and was sorted by the total amount of time spent in each function and its children.  Each entry in this table consists of several lines. The line with the index number at the left hand margin lists the current function. The lines above it list the functions that called this function, and the lines below it list the functions this one called. This line lists: index A unique number given to each element of the table. Index numbers are sorted numerically. The index number is printed next to every function name so it is easier to look up where the function in the table.  % time This is the percentage of the `total' time that was spent in this function and its children. Note that due to different viewpoints, functions excluded by options, etc, these numbers will NOT add up to 100%.  self This is the total amount of time spent in this function.  children This is the total amount of time propagated into this function by its children.  called This is the number of times the function was called. If the function called itself recursively, the number only includes non-recursive calls, and is followed by a `+' and the number of recursive calls.  name The name of the current function. The index number is printed after it. If the function is a member of a cycle, the cycle number is printed between the function's name and the index number.   For the function's parents, the fields have the following meanings:
Each entry in this table consists of several lines. The line with the index number at the left hand margin lists the current function. The lines above it list the functions that called this function, and the lines below it list the functions this one called. This line lists: self This index A unique number given to each element of the table. Index numbers are sorted numerically. The index number is the amount of time that was propagated directlyprinted next to every function name so from it is easier to look up where the function into this parentin the table.
children % time This is the amount percentage of the `total' time that was propagated fromspent the in this function's and its children into this parent. Note that due to different viewpoints, functions excluded by options, etc, these numbers will NOT add up to 100%.
called self This is the number total amount of times time spent in this parent called the function `/' the total number of times the function was called. Recursive calls to the function are not included in the number after the `/'.
name children This is the name total amount of the parent. The parent's indextime propagated into this number is printed after it. If the parent is a member of a cycle, the cycle number is printed between the name and the index numberfunction by its children.
called This is the number of times the function was called. If the function called itself recursively, the number only includes non-recursive calls, and is followed by a `+' and the number of recursive calls.  name The name of the current function. The index number is printed after it. If the function is a member of a cycle, the cycle number is printed between the function's name and the index number.   For the function's parents, the fields have the following meanings:  self This is the amount of time that was propagated directly from the function into this parent.  children This is the amount of time that was propagated from the function's children into this parent.  called This is the number of times this parent called the function `/' the total number of times the function was called. Recursive calls to the function are not included in the number after the `/'.  name This is the name of the parent. The parent's index number is printed after it. If the parent is a member of a cycle, the cycle number is printed between the name and the index number.  If the parents of the function cannot be determined, the word
`<spontaneous>' is printed in the `name' field, and all the other
fields are blank.
An even better way would be to integrate the Gaussian function instead of just taking point samples. Refer to the two graphs on the right.<br/>
The graphs plot the continuous distribution function and the discrete kernel approximation. One thing to look out for are the tails of the distribution vs. kernel supportweight:<br/>
For the current configuration, we have 13.36% of the curve’s area outside the discrete kernel. Note that the weights are renormalized such that the sum of all weights is one. Or in other words:<br/>
the probability mass outside the discrete kernel is redistributed evenly to all pixels within the kernel. The weights are calculated by numerical integration of the continuous gaussian distribution<br/>
char *destFileName = argv[2];
#endif /* RUN_GROF RUN_GPROF */
if (showUsage)
To compile and run the program:
# Navigate to the directory you want to run the program in.
# Save [http://matrix.senecac.on.ca/~cpaul12/cinque_terre.bmp this] image and place it into the directory you will be running the program from.
# Copy the Linux version of the main source code above and paste it into a [your chosen file name].cpp file.
# Copy the Linux version of the header source code above and paste it into a file named windows.h.
To compile and run the program:
# Navigate to the directory you want to run the program in.
# Save [http://matrix.senecac.on.ca/~cpaul12/cinque_terre.bmp this] image and place it into the directory you will be running the program from.
# Copy the Linux version of the main source code above and paste it into a [your chosen file name].cpp file.
# Copy the Linux version of the header source code above and paste it into a file named windows.h.
for parallelization using CUDA. The sigma (&sigma;) and the kernel size can be increased in order to make the computation stressful on the GPU to get a significant benchmark.
= Assignment 2 /3 - Parallelize & Optimize =&#42; For gaussian blur we say it's unoptimized because we feel that there is more that can be done to reduce the execution times.<br/>&nbsp;&nbsp;The code displayed in the code snippets does use CUDA parallel constructs and fine tuning techniques such as streaming - async.== Gaussian Blur ==
{| class="wikitable mw-collapsible mw-collapsed"
! Unoptimized * - BlurImage( ... )
|-
|
}
else
{ printf("could not read 24 bit bmp file %s\n\n", srcFileName); WaitForEnter(); return 1; } return 0;}</syntaxhighlight> |} == Objectives ==The main objective was to not change the main function. This objective was met, although code had to be added for profiling. == Steps ===== Host Memory Management ===In the original program a bmp is loaded into an vector of uint8_t. This is not ideal for CUDA, therefore an array of pinned memory was allocated. This array contains the same amount of elements but stores them as a structure, "BGRPixel" which is three contiguous floats. The vector is then transferred over to pinned memory.{| class="wikitable mw-collapsible mw-collapsed"! Host Memory Management - Code( ... )|-|<syntaxhighlight lang="cpp">struct SImageData{ SImageData() : m_width(0) , m_height(0) { }  long m_width; long m_height; long m_pitch; std::vector<uint8_t> m_pixels;}; struct BGRPixel { float b; float g; float r;};  void BlurImage(const SImageData& srcImage, SImageData &destImage, float xblursigma, float yblursigma, unsigned int xblursize, unsigned int yblursize){ int xImage = srcImage.m_width; // Width of image int yImage = srcImage.m_height; // Height of image int imageSize = xImage*yImage;  int xPadded = xImage + (xblursize - 1); // Width including padding int yPadded = yImage + (yblursize - 1); // Height including padding int paddedSize = xPadded*yPadded;  int xPad = xblursize / 2; // Number of padding columns on each side int yPad = yblursize / 2; int padOffset = xPadded*yPad + xPad; // Offset to first pixel in padded image  float* pinnedImage = nullptr; BGRPixel* d_padded1 = nullptr; BGRPixel* d_padded2 = nullptr;  // ...  // Allocate memory for host and device check(cudaHostAlloc((void**)&pinnedImage, 3 * imageSize * sizeof(float), 0)); check(cudaMalloc((void**)&d_padded1, paddedSize * sizeof(BGRPixel))); check(cudaMalloc((void**)&d_padded2, paddedSize * sizeof(BGRPixel)));  // Copy image to pinned memory for (int i = 0; i < 3 * imageSize; ++i) { pinnedImage[i] = (float)srcImage.m_pixels[i]; }  // ...}</syntaxhighlight> |} === Device Memory Management ===To get a blurred pixel the surrounding pixels must be sampled, in some cases this means sampling pixels outside the bounds of the image. In the original, a simple if check was used to determine if the pixel was outside the bounds or the image, if it was a black pixel was returned instead. This if statement most likely would have caused massive thread divergence in a kernel, therefore the images created in device memory featured additional padding of black pixels to compensate for this. Two such images were created, one to perform horizontal blur and one to perform vertical blur. Other small device arrays were also needed to store the Gaussian integrals that are used to produce the blurring effect.<br>{| class="wikitable mw-collapsible mw-collapsed"! Padding example|-|  <div style="display:inline;">[[File:shrunk.png]]</div><div style="display:inline;">[[File:pad.png]]</div><br>This is how the image would be padded for 3x3 sigma blur. The original image is 2560x1600 -> 11.7MB With blur sigmas [x = 3, y = 3] and conversion to float the padded images will be 2600x1640 -> 48.8MB Increase of 4.1% pixels and with the conversion for uint8_t to float total increase of 317% in memory requirements on the GPU Since two padded images are needed at least 97.6MB will be on the GPU |} === Host to Device ===To copy the pinned image to the device an array of streams was used to asynchronously copy each row of the image over. Doing so allowed the rows to be easily copied over while avoiding infringing on the extra padding pixels.=== Kernels ===First one image is blurred horizontally. One image is used as a reference while the other is written to. Kernels are also executed using the streams, so that each stream will blur a single row at a time. After the horizontal blur is finished the vertical blur is launched in the same manner, except that the previously written to image is used as a reference while the previous reference is now written to. The two blur are able to use the same kernel due to the fact that the pixel sampling technique works by iterating through pixels because of this the step size can be changed to sample across the row or down the column. === Device to Host ===After that is done the image is copied back using the streams in the same way it was copied over.=== Code === {| class="wikitable mw-collapsible mw-collapsed"! Unoptimized* - BlurImage -- Exert( ... )|-|<syntaxhighlight lang="cpp">const int ntpb = 1024;const int STREAMS = 32; void check(cudaError_t error) { if (error != cudaSuccess) { throw std::exception(cudaGetErrorString(error)); }} struct SImageData{ SImageData() : m_width(0) , m_height(0) { }  long m_width; long m_height; long m_pitch; std::vector<uint8_t> m_pixels;}; float Gaussian(float sigma, float x){ return expf(-(x*x) / (2.0f * sigma*sigma));} float GaussianSimpsonIntegration(float sigma, float a, float b){ return ((b - a) / 6.0f) * (Gaussian(sigma, a) + 4.0f * Gaussian(sigma, (a + b) / 2.0f) + Gaussian(sigma, b));} std::vector<float> GaussianKernelIntegrals(float sigma, int taps){ std::vector<float> ret; float total = 0.0f; for (int i = 0; i < taps; ++i) { float x = float(i) - float(taps / 2); float value = GaussianSimpsonIntegration(sigma, x - 0.5f, x + 0.5f); ret.push_back(value); total += value; } // normalize it for (unsigned int i = 0; i < ret.size(); ++i) { ret[i] /= total; } return ret;} struct BGRPixel { float b; float g; float r;}; __global__ void blur_kernel(BGRPixel* imageIn, BGRPixel* imageOut, float* blur, int n_blur, int x, int start, int jump) { int idx = blockDim.x*blockIdx.x + threadIdx.x; // Location on the row  if (idx < x) { int id = start + idx; int bstart = id - (n_blur / 2)*jump;  BGRPixel pixel{ 0.0f, 0.0f, 0.0f };  for (int i = 0; i < n_blur; ++i) { int bid = bstart + i*jump; float iblur = blur[i];  pixel.b += imageIn[bid].b * iblur; pixel.g += imageIn[bid].g * iblur; pixel.r += imageIn[bid].r * iblur; }  imageOut[id].b = pixel.b; imageOut[id].g = pixel.g; imageOut[id].r = pixel.r; }} void BlurImage(const SImageData& srcImage, SImageData &destImage, float xblursigma, float yblursigma, unsigned int xblursize, unsigned int yblursize){ int xImage = srcImage.m_width; // Width of image int yImage = srcImage.m_height; // Height of image int imageSize = xImage*yImage;  int xPadded = xImage + (xblursize - 1); // Width including padding int yPadded = yImage + (yblursize - 1); // Height including padding int paddedSize = xPadded*yPadded;  int xPad = xblursize / 2; // Number of padding columns on each side int yPad = yblursize / 2; int padOffset = xPadded*yPad + xPad; // Offset to first pixel in padded image  float* pinnedImage = nullptr; BGRPixel* d_padded1 = nullptr; BGRPixel* d_padded2 = nullptr;  float* d_xblur = nullptr; // XBlur integrals int n_xblur; // N  float* d_yblur = nullptr; // YBlur integrals int n_yblur; // N  // Allocate memory for host and device check(cudaHostAlloc((void**)&pinnedImage, 3 * imageSize * sizeof(float), 0)); check(cudaMalloc((void**)&d_padded1, paddedSize * sizeof(BGRPixel))); check(cudaMalloc((void**)&d_padded2, paddedSize * sizeof(BGRPixel)));  // Copy image to pinned memory for (int i = 0; i < 3 * imageSize; ++i) { pinnedImage[i] = (float)srcImage.m_pixels[i]; }  // Allocate and assign intergrals { auto row_blur = GaussianKernelIntegrals(xblursigma, xblursize); auto col_blur = GaussianKernelIntegrals(yblursigma, yblursize);  // ROW n_xblur = row_blur.size(); check(cudaMalloc((void**)&d_xblur, n_xblur * sizeof(float))); check(cudaMemcpy(d_xblur, row_blur.data(), n_xblur * sizeof(float), cudaMemcpyHostToDevice));  // COLUMN n_yblur = col_blur.size(); check(cudaMalloc((void**)&d_yblur, n_yblur * sizeof(float))); check(cudaMemcpy(d_yblur, col_blur.data(), n_yblur * sizeof(float), cudaMemcpyHostToDevice)); }   cudaStream_t stream[STREAMS];  int nblks = (xImage + (ntpb - 1)) / ntpb;  for (int i = 0; i < STREAMS; ++i) { check(cudaStreamCreate(&stream[i])); }  for (int i = 0; i < yImage;) { for (int j = 0; j < STREAMS && i < yImage; ++j, ++i) { cudaMemcpyAsync(d_padded1 + padOffset + i*xPadded, pinnedImage + (3 * i*xImage), 3 * xImage * sizeof(float), cudaMemcpyHostToDevice, stream[j]); } }  for (int i = 0; i < yImage;) { for (int j = 0; j < STREAMS && i < yImage; ++j, ++i) { blur_kernel << <nblks, ntpb, 0, stream[j] >> > (d_padded1, d_padded2, d_xblur, n_xblur, xImage, padOffset + i*xPadded, 1); } }  for (int i = 0; i < yImage;) { for (int j = 0; j < STREAMS && i < yImage; ++j, ++i) { blur_kernel << <nblks, ntpb, 0, stream[j] >> > (d_padded2, d_padded1, d_yblur, n_yblur, xImage, padOffset + i*xPadded, xPadded); } }  for (int i = 0; i < yImage;) { for (int j = 0; j < STREAMS && i < yImage; ++j, ++i) { check(cudaMemcpyAsync(pinnedImage + (3 * i*xImage), d_padded1 + padOffset + i*xPadded, xImage * sizeof(BGRPixel), cudaMemcpyDeviceToHost, stream[j])); } }  for (int i = 0; i < STREAMS; ++i) { check(cudaStreamSynchronize(stream[i])); check(cudaStreamDestroy(stream[i])); }  destImage.m_width = srcImage.m_width; destImage.m_height = srcImage.m_height; destImage.m_pitch = srcImage.m_pitch; destImage.m_pixels.resize(srcImage.m_pixels.size());  for (int i = 0; i < 3 * imageSize; i++) { destImage.m_pixels[i] = (uint8_t)pinnedImage[i]; };  check(cudaFree(d_xblur)); check(cudaFree(d_yblur));  check(cudaFreeHost(pinnedImage)); check(cudaFree(d_padded1)); check(cudaFree(d_padded2));  check(cudaDeviceReset());} </syntaxhighlight> |} == Results ==Obtained using Quadro K620<br>[[File:uvso2.png]][[File:usession.png]][[File:ktimes.png]]<br>Using a Quadro K2000<br>[[File:streams.png]] == Output Images ==[http://imgur.com/a/CtMOc Image Gallery][https://seneca-my.sharepoint.com/personal/jkraitberg_myseneca_ca/_layouts/15/guestaccess.aspx?docid=099a13c42168943b587de4b59e4634e06&authkey=Afl_iMqjNyFhoYu3bopOw5E 135MB Image][https://seneca-my.sharepoint.com/personal/jkraitberg_myseneca_ca/_layouts/15/guestaccess.aspx?docid=007880dac1dd74d09b74fc448dc3fac38&authkey=AdqHCKEjZCXzlyftjZWxFCA 135MB 3x3 Result] == Mandelbrot =={| class="wikitable mw-collapsible mw-collapsed"! Unoptimized - Mandelbrot( ... )|-|<syntaxhighlight lang="cpp">//C++ Includes#include <iostream>#include <complex>#include <vector>#include <chrono>#include <functional>#include <cuda_runtime.h> //CUDA Complex Numbers#include <cuComplex.h> //Helper Includes#include "window.h"#include "save_image.h"#include "utils.h" const int ntpb = 32; //Compute Color for each pixel__global__ void computeMandelbrot( int iter_max, int* d_colors, int fract_width, int fract_height, int scr_width, int scr_height, int fract_xmin, int fract_ymin){ int row = blockIdx.y * blockDim.y + threadIdx.y; //Row int col = blockIdx.x * blockDim.x + threadIdx.x; //Col  int idx = row * scr_width + col; //Pixel Index  if(col < scr_width && row < scr_height){  //Use Floating Complex Numbers to calculate color for each pixel int result = 0; cuFloatComplex c = make_cuFloatComplex((float)col, (float)row); cuFloatComplex d = make_cuFloatComplex(cuCrealf(c) / (float)scr_width * fract_width + fract_xmin , cuCimagf(c) / (float)scr_height * fract_height + fract_ymin); cuFloatComplex z = make_cuFloatComplex(0.0f, 0.0f);  while((cuCabsf(z) < 2.0f) && (result < iter_max)){ z = (cuCaddf(cuCmulf(z,z),d)); result++; } d_colors[idx] = result; //Output }} void mandelbrot(){ window<int> scr(0, 1000, 0, 1000); //Image Size window<float> fract(-2.2,1.2,-1.7,1.7); //Fractal Size int iter_max = 500; //Iterations const char* fname = "mandlebrot_gpu.png"; //Output File Name bool smooth_color = true; //Color Smoothing  int nblks = (scr.width() + ntpb - 1)/ ntpb; //Blocks std::vector<int> colors(scr.size()); //Output Vector //Allocate Device Memory int* d_colors; cudaMalloc((void**)&d_colors, scr.size() * sizeof(int));  //Grid Layout dim3 dGrid(nblks, nblks); dim3 dBlock(ntpb, ntpb);  //Execute Kernel auto start = std::chrono::steady_clock::now(); computeMandelbrot<<<dGrid, dBlock>>>(iter_max, d_colors, fract.width(), fract.height(), scr.width(), scr.height(), fract.x_min(), fract.y_min()); cudaDeviceSynchronize(); auto end = std::chrono::steady_clock::now();  //Output Time std::cout << "Time to generate " << fname << " = " << std::chrono::duration <float, std::milli> (end - start).count() << " [ms]" << std::endl;  //Copy Data back to Host cudaMemcpy(colors.data(), d_colors, scr.size() * sizeof(int), cudaMemcpyDeviceToHost);  //Plot Data and Free Memory plot(scr, colors, iter_max, fname, smooth_color); cudaFree(d_colors);} int main(){ mandelbrot(); return 0;}</syntaxhighlight>|} === Objectives ===The main objective was refactor the get_number_iterations() function and the subsequent functions called that created the nested loops. The objective was met as all the functions were refactored into a single device function that did the calculation for a single pixel of the image. As the original program was done with doubles, all of the doubles were changed to floats. === Steps === === Host Memory Management ===No changes were needed to the Host Memory as no data is copied from the host to the device. The vector on the host that contains the data was not changed and data from the device was copied to this vector to be output the plot file.  === Device Memory Management ===Only a single array to hold the value for each pixel was created on the device. This array has a size of image width * image height and the row and columns for each image are calculated from this which are used in the complex number calculations along with the values that specify the parameters of the fractal. === Kernels ===The three functions from the original code ( get_number_iterations() , escape() and scale() were refactored into a single computeMandelbrot() function. The device kernel calculates the row and column for the pixel and then uses the row and colmn values along with the picture width and fractal parameters to calculate the value. Complex floating point numbers are used using the cuComplex.h header file which also includes the operations for the complex numbers as well. As threads are not reliant on each other for any data, no use of __syncthreads() is required. As threads complete computing the values, they output the value to the d_colors array.
|}
 
== Objectives ==
The main objective was to not change the main function. This objective was met, although code had to be added for profiling.
== Steps ==
=== Host Memory Management ===
In the original program a bmp is loaded into an vector of uint8_t. This is not ideal for CUDA, therefore an array of pinned memory was allocated. This array contains the same amount of elements but stores them as a structure, "BGRPixel" which is three contiguous floats. The vector is then transferred over to pinned memory.
=== Device Memory Management ===
To get a blurred pixel the surrounding pixels must be sampled, in some cases this means sampling pixels outside the bounds of the image. In the original, a simple if check was used to determine if the pixel was outside the bounds or the image, if it was a black pixel was returned instead. This if statement most likely would have caused massive thread divergence in a kernel, therefore the images created in device memory featured additional padding of black pixels to compensate for this. Two such images were created, one to perform horizontal blur and one to perform vertical blur. Other small device arrays were also needed to store the Gaussian integrals that are used to produce the blurring effect.
=== Host to Device ===
To copy the pinned image to the device an array of streams was used to asynchronously copy each row of the image over. Doing so allowed the rows to be easily copied over while avoiding infringing on the extra padding pixels.
=== Kernels ===
First one image is blurred horizontally. One image is used as a reference while the other is written to. Kernels are also executed using the streams, so that each stream will blur a single row at a time. After the horizontal blur is finished the vertical blur is launched in the same manner, except that the previously written to image is used as a reference while the previous reference is now written to. The two blur are able to use the same kernel due to the fact that the pixel sampling technique works by iterating through pixels because of this the step size can be changed to sample across the row or down the column.
=== Device to Host ===
After that is done the image is copied back using a single memcpy to the streams in the same way it was copied over. == Results ==[[File:uvso.png]][[File:usession.png]][[File:ktimeshost.png]] == Output Images =={| class="wikitable mw-collapsible mw-collapsed"! Original Image|-| |} {| class="wikitable mw-collapsible mw-collapsed"! 3x3 Image|-|
=== Results ===The program was compiled using clang++ , icpc (Intel Parallel Studio Compiler) and NVCC for the GPU. Runtimes for the standard clang++ version were extremely slow as the size of the resultant image increased. Compiling the program using the icpc compiler brought in significant changes without modifying any code and reduced runtimes drastically for running purely on a CPU. Using the parallel version based on CUDA improved the runtime massively over the clang++ compiled version and even the icpc version as more values could be calculated in parallel.[[Image:Mandelbrot.png |}750px]]
{| class="wikitable mw-collapsible mw-collapsed"! 5x5 Image|-| |} {| class="wikitable mw-collapsible mw-collapsed"! 7x7 Image|-| |} {| class="wikitable mw-collapsible mw-collapsed"! 9x9 Image|-| |} {| classOutput Images =="wikitable mw-collapsible mw-collapsed"! 21x21 Image|-| |} {| class="wikitable mw-collapsible mw-collapsed"! 57x57 [http://imgur.com/a/R3ZAH Image|-| |}Output]
= Assignment 3 - Optimize == Future Optimizations ===As there isn't any data intensive tasks in this program, further optimizations would include creating streams of kernels and having them execute concurrently in order to improve runtime of the current solution.
147
edits

Navigation menu