Back Propagation Acceleration
Team Members
- Sebastian Djurovic, Team Lead and Developer
- Henry Leung, Developer and Quality Control
- ...
Progress
Assignment 1
Our group decided to profile a couple of different solutions, the first being a simple neural network and ray tracing solution, in order to determine the best project to generate a solution for.
Neural Network
Sebastian's findings
I found a simple neural network that takes a MNIST data set and preforms training on batches of the data. For a quick illustration MNIST is a numerical data set that contains many written numbers --in a gray scale format at 28 x 28 pixels in size. As well as the corresponding numerical values; between 0 and 9. The reason for this data set is to train networks such that they will be able to recognize written numbers when they confront them.
Initial Profile
Flat profile: Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls ns/call ns/call name 97.94 982.46 982.46 dot(std::vector<float, std::allocator<float> > const&, std::vector<float, std::allocator<float> > const&, int, int, int) 1.45 997.05 14.58 transpose(float*, int, int) 0.15 998.56 1.51 operator-(std::vector<float, std::allocator<float> > const&, std::vector<float, std::allocator<float> > const&) 0.15 1000.06 1.50 relu(std::vector<float, std::allocator<float> > const&) 0.15 1001.55 1.49 operator*(float, std::vector<float, std::allocator<float> > const&) 0.07 1002.27 0.72 519195026 1.39 1.39 void std::vector<float, std::allocator<float> >::emplace_back<float>(float&&) 0.06 1002.91 0.63 operator*(std::vector<float, std::allocator<float> > const&, std::vector<float, std::allocator<float> > const&) 0.05 1003.37 0.46 reluPrime(std::vector<float, std::allocator<float> > const&) 0.02 1003.62 0.25 softmax(std::vector<float, std::allocator<float> > const&, int) 0.01 1003.75 0.13 operator/(std::vector<float, std::allocator<float> > const&, float) 0.01 1003.87 0.12 442679 271.35 271.35 void std::vector<float, std::allocator<float> >::_M_emplace_back_aux<float>(float&&) 0.01 1003.96 0.09 13107321 6.87 6.87 void std::vector<float, std::allocator<float> >::_M_emplace_back_aux<float const&>(float const&) 0.01 1004.02 0.06 split(std::string const&, char) 0.01 1004.08 0.06 462000 130.00 130.00 void std::vector<std::string, std::allocator<std::string> >::_M_emplace_back_aux<std::string const&>(std::string const&) 0.00 1004.11 0.03 std::vector<std::string, std::allocator<std::string> >::~vector() 0.00 1004.12 0.01 random_vector(int) 0.00 1004.12 0.00 3 0.00 0.00 std::vector<float, std::allocator<float> >::vector(unsigned long, std::allocator<float> const&) 0.00 1004.12 0.00 1 0.00 0.00 _GLOBAL__sub_I__Z5printRKSt6vectorIfSaIfEEii
After the initial profile it is obvious that the dot product function consumes 97.94% of our run time. Additionally, the transpose function also consumes 1.45% which seems messily, however during back propagation transpose is also called, as well as two rectifiers(activation functions), reluPrime and relu. Where reluPrime is a binary activation function.
Relu = f(x) = {0 for x > 0, x otherwise}
ReluPrime = f(x) = {0 for x > 0, 1 otherwise}
Code Snippets
// Back propagation vector<float> dyhat = (yhat - b_y); // dW3 = a2.T * dyhat vector<float> dW3 = dot(transpose( &a2[0], BATCH_SIZE, 64 ), dyhat, 64, BATCH_SIZE, 10); // dz2 = dyhat * W3.T * relu'(a2) vector<float> dz2 = dot(dyhat, transpose( &W3[0], 64, 10 ), BATCH_SIZE, 10, 64) * reluPrime(a2); // dW2 = a1.T * dz2 vector<float> dW2 = dot(transpose( &a1[0], BATCH_SIZE, 128 ), dz2, 128, BATCH_SIZE, 64); // dz1 = dz2 * W2.T * relu'(a1) vector<float> dz1 = dot(dz2, transpose( &W2[0], 128, 64 ), BATCH_SIZE, 64, 128) * reluPrime(a1); // dW1 = X.T * dz1 vector<float> dW1 = dot(transpose( &b_X[0], BATCH_SIZE, 784 ), dz1, 784, BATCH_SIZE, 128);
vector <float> dot (const vector <float>& m1, const vector <float>& m2, const int m1_rows, const int m1_columns, const int m2_columns) { vector <float> output (m1_rows*m2_columns); for( int row = 0; row != m1_rows; ++row ) { for( int col = 0; col != m2_columns; ++col ) { output[ row * m2_columns + col ] = 0.f; for( int k = 0; k != m1_columns; ++k ) { output[ row * m2_columns + col ] += m1[ row * m1_columns + k ] * m2[ k * m2_columns + col ]; } } } return output; }
Amdahl's law
When Amdahl's law is applied the theoretical speed up is 48.54x, however due to the exception the actual prediction is no more then 10x faster.
Theoretical:
s = 1/(1 - 97.94%) = 1/(1 - 0.9794) = 48.54
Prediction:
P = 102s
Possible complications
The main concern when parallelizing these code snippets is that memory copying is going to take up a lot of time, so despite the predicted speed up, there is no certain answer until the Cuda kernel is complete.
Hypothesis
Our Hypothesis for this solution is a acceleration of roughly 10x; when dot() is parallelized. This means that our code should take somewhere in the ball park of 102 seconds to train the network.
Ray Tracing
Henry's findings
I decided to choose a ray tracing program that draws graphics such as a block, cuboid and cylinder. The shapes are rendered with shadows. The program is from http://cosinekitty.com/raytrace.
Initial Profile
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total time seconds seconds calls s/call s/call name 43.88 8.38 8.38 406030768 0.00 0.00 Algebra::SolveLinearEquations(double, double, double, double, double, double, double, double, double, double, double, double, double&, double&, double&) 13.98 11.05 2.67 14003920 0.00 0.00 Imager::TriangleMesh::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 8.12 12.60 1.55 34580399 0.00 0.00 Imager::Cuboid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 7.72 14.08 1.48 66701722 0.00 0.00 Imager::Sphere::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 3.25 14.70 0.62 50859850 0.00 0.00 Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 3.12 15.29 0.60 8534998 0.00 0.00 Imager::Scene::CalculateMatte(Imager::Intersection const&) const 2.64 15.80 0.51 594 0.00 0.00 encodeLZ77(uivector*, Hash*, unsigned char const*, unsigned long, unsigned long, unsigned int) 1.88 16.16 0.36 118023768 0.00 0.00 Imager::Cuboid::ObjectSpace_Contains(Imager::Vector const&) const 1.73 16.49 0.33 15 0.02 1.26 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const 1.31 16.74 0.25 3262804 0.00 0.00 Imager::Scene::CalculateRefraction(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int, double&) const 1.26 16.98 0.24 5171493 0.00 0.00 Algebra::SolveQuarticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) 1.07 17.18 0.21 18609329 0.00 0.00 Imager::Scene::FindClosestIntersection(Imager::Vector const&, Imager::Vector const&, Imager::Intersection&) const 1.02 17.38 0.20 18609329 0.00 0.00 Imager::Scene::TraceRay(Imager::Vector const&, Imager::Vector const&, double, Imager::Color, int) const 0.92 17.55 0.18 83146683 0.00 0.00 Imager::PickClosestIntersection(std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > const&, Imager::Intersection&) 0.89 17.72 0.17 8573986 0.00 0.00 Imager::Scene::CalculateLighting(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const 0.86 17.89 0.17 22928551 0.00 0.00 Imager::Scene::HasClearLineOfSight(Imager::Vector const&, Imager::Vector const&) const 0.63 18.01 0.12 1966663 0.00 0.00 Imager::Torus::SurfaceNormal(Imager::Vector const&) const 0.58 18.12 0.11 7514037 0.00 0.00 Imager::ThinRing::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 0.42 18.20 0.08 5171490 0.00 0.00 Imager::Torus::SolveIntersections(Imager::Vector const&, Imager::Vector const&, double*) const 0.42 18.28 0.08 3115245 0.00 0.00 Imager::Spheroid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 0.34 18.34 0.07 Imager::Scene::PolarizedReflection(double, double, double, double) const 0.31 18.40 0.06 11368907 0.00 0.00 Imager::Sphere::Contains(Imager::Vector const&) const 0.31 18.46 0.06 6856730 0.00 0.00 Algebra::SolveQuadraticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) 0.26 18.51 0.05 9484218 0.00 0.00 Imager::SolidObject_Reorientable::Contains(Imager::Vector const&) const 0.26 18.56 0.05 2906525 0.00 0.00 Imager::Scene::CalculateReflection(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const 0.21 18.60 0.04 12028218 0.00 0.00 Algebra::FilterRealNumbers(int, std::complex<double> const*, double*) 0.21 18.64 0.04 5171490 0.00 0.00 Imager::Torus::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 0.21 18.68 0.04 3522280 0.00 0.00 Imager::SolidObject_Reorientable::SurfaceOptics(Imager::Vector const&, void const*) const 0.16 18.71 0.03 5171292 0.00 0.00 Algebra::cbrt(std::complex<double>, int) 0.16 18.74 0.03 5088067 0.00 0.00 string_set(char**, char const*) 0.16 18.77 0.03 957358 0.00 0.00 Imager::Cylinder::AppendDiskIntersection(Imager::Vector const&, Imager::Vector const&, double, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 0.16 18.80 0.03 17010 0.00 0.00 addBitsToStreamReversed(unsigned long*, ucvector*, unsigned int, unsigned long) 0.16 18.83 0.03 frame_dummy 0.13 18.86 0.03 3617416 0.00 0.00 Imager::SolidObject::SurfaceOptics(Imager::Vector const&, void const*) const 0.10 18.88 0.02 13944693 0.00 0.00 Imager::SetUnion::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 0.10 18.90 0.02 11893060 0.00 0.00 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 0.10 18.92 0.02 3538132 0.00 0.00 Imager::TriangleMesh::NormalVector(Imager::TriangleMesh::Triangle const&) const 0.10 18.94 0.02 1425590 0.00 0.00 Imager::Optics::ValidateReflectionColor(Imager::Color const&) const 0.10 18.96 0.02 1 0.02 0.02 Imager::SolidObject_Reorientable::RotateZ(double) 0.08 18.97 0.02 170828 0.00 0.00 Imager::SolidObject::Contains(Imager::Vector const&) const 0.05 18.98 0.01 5946530 0.00 0.00 Imager::SetIntersection::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 0.05 18.99 0.01 5268088 0.00 0.00 Imager::SetComplement::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 0.05 19.00 0.01 3682000 0.00 0.00 getPixelColorRGBA8(unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char const*, unsigned long, LodePNGColorMode const*) 0.05 19.01 0.01 3170898 0.00 0.00 Imager::SetComplement::Contains(Imager::Vector const&) const 0.05 19.02 0.01 2953369 0.00 0.00 addBitToStream(unsigned long*, ucvector*, unsigned char) 0.05 19.03 0.01 2096776 0.00 0.00 Imager::SolidObject_Reorientable::ObjectSpace_SurfaceOptics(Imager::Vector const&, void const*) const 0.05 19.04 0.01 1425504 0.00 0.00 Imager::ChessBoard::ObjectSpace_SurfaceOptics(Imager::Vector const&, void const*) const 0.05 19.05 0.01 627238 0.00 0.00 color_tree_has(ColorTree*, unsigned char, unsigned char, unsigned char, unsigned char) 0.05 19.06 0.01 77932 0.00 0.00 Imager::Torus::ObjectSpace_Contains(Imager::Vector const&) const 0.05 19.07 0.01 3016 0.00 0.00 sort_coins(Coin*, unsigned long) 0.05 19.08 0.01 73 0.00 0.00 Imager::SolidObject::Translate(double, double, double) 0.05 19.09 0.01 15 0.00 0.00 lodepng_convert(unsigned char*, unsigned char const*, LodePNGColorMode*, LodePNGColorMode*, unsigned int, unsigned int) 0.03 19.10 0.01 Imager::SolidObject_BinaryOperator::RotateZ(double) 0.00 19.10 0.00 2431840 0.00 0.00 Imager::SetUnion::Contains(Imager::Vector const&) const 0.00 19.10 0.00 1447152 0.00 0.00 uivector_push_back(uivector*, unsigned int) 0.00 19.10 0.00 1425505 0.00 0.00 Imager::Optics::SetMatteColor(Imager::Color const&) 0.00 19.10 0.00 1395302 0.00 0.00 Imager::TriangleMesh::SurfaceOptics(Imager::Vector const&, void const*) const 0.00 19.10 0.00 1137648 0.00 0.00 Imager::ChessBoard::SquareCoordinate(double) const 0.00 19.10 0.00 738585 0.00 0.00 ucvector_push_back(ucvector*, unsigned char) 0.00 19.10 0.00 478679 0.00 0.00 Imager::Cylinder::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const 0.00 19.10 0.00 406979 0.00 0.00 lodepng_color_mode_equal(LodePNGColorMode const*, LodePNGColorMode const*) 0.00 19.10 0.00 255938 0.00 0.00 searchCodeIndex(unsigned int const*, unsigned long, unsigned long) 0.00 19.10 0.00 3245 0.00 0.00 cleanup_coins(Coin*, unsigned long) 0.00 19.10 0.00 2787 0.00 0.00 append_symbol_coins(Coin*, unsigned int const*, unsigned int, unsigned long) 0.00 19.10 0.00 729 0.00 0.00 uivector_resizev(uivector*, unsigned long, unsigned int) [clone .constprop.64] 0.00 19.10 0.00 607 0.00 0.00 lodepng_palette_add(LodePNGColorMode*, unsigned char, unsigned char, unsigned char, unsigned char) 0.00 19.10 0.00 243 0.00 0.00 lodepng_huffman_code_lengths(unsigned int*, unsigned int const*, unsigned long, unsigned int) 0.00 19.10 0.00 243 0.00 0.00 HuffmanTree_cleanup(HuffmanTree*) 0.00 19.10 0.00 243 0.00 0.00 HuffmanTree_makeFromLengths2(HuffmanTree*) 0.00 19.10 0.00 243 0.00 0.00 HuffmanTree_makeFromFrequencies(HuffmanTree*, unsigned int const*, unsigned long, unsigned int) 0.00 19.10 0.00 120 0.00 0.00 Imager::Dodecahedron::CheckEdge(int, int, double) const 0.00 19.10 0.00 92 0.00 0.00 Imager::TriangleMesh::AddTriangle(int, int, int, Imager::Optics const&) 0.00 19.10 0.00 88 0.00 0.00 std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Intersection*, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > >, Imager::Intersection const&) 0.00 19.10 0.00 48 0.00 0.00 lodepng_chunk_generate_crc(unsigned char*) 0.00 19.10 0.00 48 0.00 0.00 Crc32_update_crc(unsigned char const*, unsigned int, unsigned long) [clone .constprop.62] 0.00 19.10 0.00 48 0.00 0.00 addUnknownChunks(ucvector*, unsigned char*, unsigned long) 0.00 19.10 0.00 45 0.00 0.00 lodepng_chunk_create(unsigned char**, unsigned long*, unsigned int, char const*, unsigned char const*) 0.00 19.10 0.00 45 0.00 0.00 lodepng_info_cleanup(LodePNGInfo*) 0.00 19.10 0.00 45 0.00 0.00 LodePNGText_cleanup(LodePNGInfo*) 0.00 19.10 0.00 45 0.00 0.00 lodepng_add32bitInt(ucvector*, unsigned int) 0.00 19.10 0.00 45 0.00 0.00 LodePNGIText_cleanup(LodePNGInfo*) 0.00 19.10 0.00 30 0.00 0.00 lodepng_info_init(LodePNGInfo*) 0.00 19.10 0.00 30 0.00 0.00 checkColorValidity(LodePNGColorType, unsigned int) 0.00 19.10 0.00 29 0.00 0.00 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) 0.00 19.10 0.00 24 0.00 0.00 Imager::Dodecahedron::AddFace(int, int, int, int, int, Imager::Optics const&, double) 0.00 19.10 0.00 22 0.00 0.00 Algebra::ValidatePolynomial(int, std::complex<double> const*, std::complex<double>) 0.00 19.10 0.00 21 0.00 0.00 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) 0.00 19.10 0.00 20 0.00 0.00 Imager::SolidObject_BinaryOperator::NestedRotateY(Imager::SolidObject&, double, double, double) 0.00 19.10 0.00 20 0.00 0.00 std::vector<Imager::TriangleMesh::Triangle, std::allocator<Imager::TriangleMesh::Triangle> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::TriangleMesh::Triangle*, std::vector<Imager::TriangleMesh::Triangle, std::allocator<Imager::TriangleMesh::Triangle> > >, Imager::TriangleMesh::Triangle const&) 0.00 19.10 0.00 20 0.00 0.00 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) 0.00 19.10 0.00 18 0.00 0.00 Imager::SolidObject_Reorientable::RotateX(double) 0.00 19.10 0.00 18 0.00 0.00 Imager::SolidObject_BinaryOperator::NestedRotateX(Imager::SolidObject&, double, double, double) 0.00 19.10 0.00 17 0.00 0.00 std::vector<Imager::Vector, std::allocator<Imager::Vector> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Vector*, std::vector<Imager::Vector, std::allocator<Imager::Vector> > >, Imager::Vector const&) 0.00 19.10 0.00 15 0.00 0.04 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) 0.00 19.10 0.00 15 0.00 0.02 lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) 0.00 19.10 0.00 15 0.00 0.00 lodepng_info_copy(LodePNGInfo*, LodePNGInfo const*) 0.00 19.10 0.00 15 0.00 0.00 lodepng_state_init(LodePNGState*) 0.00 19.10 0.00 15 0.00 0.04 lodepng_encode_memory(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) 0.00 19.10 0.00 15 0.00 0.00 lodepng_state_cleanup(LodePNGState*) 0.00 19.10 0.00 15 0.00 0.03 lodepng_zlib_compress(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) 0.00 19.10 0.00 15 0.00 0.00 lodepng_can_have_alpha(LodePNGColorMode const*) 0.00 19.10 0.00 15 0.00 0.00 lodepng_color_mode_copy(LodePNGColorMode*, LodePNGColorMode const*) 0.00 19.10 0.00 15 0.00 0.00 zlib_compress(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) 0.00 19.10 0.00 15 0.00 0.00 update_adler32(unsigned int, unsigned char const*, unsigned int) [clone .constprop.61] 0.00 19.10 0.00 15 0.00 0.00 preProcessScanlines(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGInfo const*, LodePNGEncoderSettings const*) 0.00 19.10 0.00 15 0.00 0.00 Imager::SolidObject_Reorientable::RotateY(double) 0.00 19.10 0.00 15 0.00 0.00 Imager::Scene::ClearSolidObjectList() 0.00 19.10 0.00 15 0.00 0.00 Imager::Scene::~Scene() 0.00 19.10 0.00 15 0.00 0.04 lodepng::encode(std::string const&, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) 0.00 19.10 0.00 15 0.00 0.00 lodepng::encode(std::string const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, unsigned int, unsigned int, LodePNGColorType, unsigned int) 0.00 19.10 0.00 15 0.00 0.04 lodepng::encode(std::vector<unsigned char, std::allocator<unsigned char> >&, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) 0.00 19.10 0.00 15 0.00 0.00 lodepng::save_file(std::vector<unsigned char, std::allocator<unsigned char> > const&, std::string const&) 0.00 19.10 0.00 15 0.00 0.00 void std::vector<unsigned char, std::allocator<unsigned char> >::_M_range_insert<unsigned char*>(__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >, unsigned char*, unsigned char*, std::forward_iterator_tag) 0.00 19.10 0.00 14 0.00 0.00 Imager::SolidObject_BinaryOperator::Translate(double, double, double) 0.00 19.10 0.00 13 0.00 0.00 Imager::Sphere::~Sphere() 0.00 19.10 0.00 10 0.00 0.00 Imager::SolidObject_BinaryOperator::RotateY(double) 0.00 19.10 0.00 9 0.00 0.00 Imager::SolidObject_BinaryOperator::RotateX(double) 0.00 19.10 0.00 8 0.00 0.00 Imager::SetComplement::Translate(double, double, double) 0.00 19.10 0.00 7 0.00 0.00 Algebra::CheckRoots(int, std::complex<double> const*, std::complex<double> const*) 0.00 19.10 0.00 6 0.00 0.00 Imager::Optics::SetOpacity(double) 0.00 19.10 0.00 5 0.00 0.00 Imager::Torus::~Torus() 0.00 19.10 0.00 5 0.00 0.00 Imager::Sphere::RotateY(double) 0.00 19.10 0.00 4 0.00 0.00 Imager::Cuboid::~Cuboid() 0.00 19.10 0.00 4 0.00 0.00 Imager::SetUnion::~SetUnion() 0.00 19.10 0.00 3 0.00 0.00 Imager::TriangleMesh::RotateX(double) 0.00 19.10 0.00 3 0.00 0.00 Imager::TriangleMesh::RotateY(double) 0.00 19.10 0.00 3 0.00 0.00 Imager::SetComplement::RotateY(double) 0.00 19.10 0.00 3 0.00 0.00 Imager::SetComplement::~SetComplement() 0.00 19.10 0.00 3 0.00 0.00 Imager::Sphere::RotateX(double) 0.00 19.10 0.00 3 0.00 0.00 Imager::ThinRing::~ThinRing() 0.00 19.10 0.00 3 0.00 0.00 Algebra::TestKnownQuarticRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) 0.00 19.10 0.00 2 0.00 1.27 TorusTest(char const*, double) 0.00 19.10 0.00 2 0.00 0.00 Imager::Dodecahedron::Dodecahedron(Imager::Vector, double, Imager::Optics const&) 0.00 19.10 0.00 2 0.00 0.00 Imager::Dodecahedron::~Dodecahedron() 0.00 19.10 0.00 2 0.00 0.00 Imager::SetComplement::RotateX(double) 0.00 19.10 0.00 2 0.00 0.00 Imager::SetDifference::~SetDifference() 0.00 19.10 0.00 2 0.00 0.00 Imager::SetIntersection::~SetIntersection() 0.00 19.10 0.00 2 0.00 0.00 Algebra::SolveCubicEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) 0.00 19.10 0.00 2 0.00 0.00 Algebra::TestKnownCubicRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) 0.00 19.10 0.00 2 0.00 0.00 Algebra::TestKnownQuadraticRoots(std::complex<double>, std::complex<double>, std::complex<double>) 0.00 19.10 0.00 1 0.00 0.00 _GLOBAL__sub_I__Z9BlockTestv 0.00 19.10 0.00 1 0.00 0.00 _GLOBAL__sub_I__ZN6Imager5Scene20ClearSolidObjectListEv 0.00 19.10 0.00 1 0.00 0.00 _GLOBAL__sub_I__ZN6Imager6IndentERSoi 0.00 19.10 0.00 1 0.00 0.00 _GLOBAL__sub_I__ZN7Algebra20SolveLinearEquationsEddddddddddddRdS0_S0_ 0.00 19.10 0.00 1 0.00 1.26 CuboidTest() 0.00 19.10 0.00 1 0.00 1.27 SaturnTest() 0.00 19.10 0.00 1 0.00 1.27 BitDonutTest() 0.00 19.10 0.00 1 0.00 1.26 CylinderTest() 0.00 19.10 0.00 1 0.00 1.26 SpheroidTest() 0.00 19.10 0.00 1 0.00 1.26 PolyhedraTest() 0.00 19.10 0.00 1 0.00 1.28 ChessBoardTest() 0.00 19.10 0.00 1 0.00 1.27 SetDifferenceTest() 0.00 19.10 0.00 1 0.00 1.26 MultipleSphereTest() 0.00 19.10 0.00 1 0.00 1.27 SetIntersectionTest() 0.00 19.10 0.00 1 0.00 1.26 DodecahedronOverlapTest() 0.00 19.10 0.00 1 0.00 1.27 BlockTest() 0.00 19.10 0.00 1 0.00 0.00 Imager::ChessBoard::ChessBoard(double, double, double, double, Imager::Color const&, Imager::Color const&, Imager::Color const&) 0.00 19.10 0.00 1 0.00 0.00 Imager::ChessBoard::~ChessBoard() 0.00 19.10 0.00 1 0.00 0.00 Imager::Icosahedron::Icosahedron(Imager::Vector, double, Imager::Optics const&) 0.00 19.10 0.00 1 0.00 0.00 Imager::Icosahedron::~Icosahedron() 0.00 19.10 0.00 1 0.00 0.00 Imager::ConcreteBlock::~ConcreteBlock() 0.00 19.10 0.00 1 0.00 0.00 Imager::Optics::SetGlossColor(Imager::Color const&) 0.00 19.10 0.00 1 0.00 0.00 Imager::Planet::~Planet() 0.00 19.10 0.00 1 0.00 0.00 Imager::Saturn::CreateRingSystem() 0.00 19.10 0.00 1 0.00 0.00 Imager::Saturn::~Saturn() 0.00 19.10 0.00 1 0.00 0.00 Imager::Cylinder::~Cylinder() 0.00 19.10 0.00 1 0.00 0.00 Imager::Spheroid::~Spheroid() 0.00 19.10 0.00 1 0.00 0.00 Algebra::UnitTest()
From looking at the flat profile, 43.88% of time is in SolveLinearEquations. Most of the other time is used for calculating the shapes, while 1.02% is in the TraceRay function.
Call Graph
Call graph
granularity: each sample hit covers 2 byte(s) for 0.05% of 19.10 seconds
index % time self children called name
0.02 1.24 1/15 SphereTest() [26] 0.02 1.24 1/15 CuboidTest() [22] 0.02 1.24 1/15 SetDifferenceTest() [21] 0.02 1.24 1/15 CylinderTest() [23] 0.02 1.24 1/15 SpheroidTest() [24] 0.02 1.24 1/15 SetIntersectionTest() [19] 0.02 1.24 1/15 MultipleSphereTest() [25] 0.02 1.24 1/15 PolyhedraTest() [27] 0.02 1.24 1/15 BitDonutTest() [20] 0.02 1.24 1/15 SaturnTest() [18] 0.02 1.24 1/15 DodecahedronOverlapTest() [28] 0.02 1.24 1/15 BlockTest() [17] 0.02 1.24 1/15 ChessBoardTest() [16] 0.04 2.48 2/15 TorusTest(char const*, double) [12]
[1] 99.3 0.33 18.64 15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1]
0.67 17.36 12440000/12440000 Imager::Scene::TraceRay(Imager::Vector const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [9] 0.00 0.62 15/15 lodepng::encode(std::string const&, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [33] 0.00 0.00 15/15 lodepng::encode(std::string const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, unsigned int, unsigned int, LodePNGColorType, unsigned int) [147]
[2] 94.4 0.67 17.36 12440000+20912644 <cycle 4 as a whole> [2]
0.17 9.87 8573986 Imager::Scene::CalculateLighting(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [5] 0.20 7.37 18609329 Imager::Scene::TraceRay(Imager::Vector const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [9] 0.25 0.12 3262804 Imager::Scene::CalculateRefraction(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int, double&) const <cycle 4> [40] 0.05 0.00 2906525 Imager::Scene::CalculateReflection(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [58]
<spontaneous>
[3] 92.9 0.00 17.73 UnitTests() [3]
0.00 2.53 2/2 TorusTest(char const*, double) [12] 0.00 1.28 1/1 ChessBoardTest() [16] 0.00 1.27 1/1 BlockTest() [17] 0.00 1.27 1/1 SaturnTest() [18] 0.00 1.27 1/1 SetIntersectionTest() [19] 0.00 1.27 1/1 BitDonutTest() [20] 0.00 1.27 1/1 SetDifferenceTest() [21] 0.00 1.26 1/1 CylinderTest() [23] 0.00 1.26 1/1 CuboidTest() [22] 0.00 1.26 1/1 SpheroidTest() [24] 0.00 1.26 1/1 MultipleSphereTest() [25] 0.00 1.26 1/1 DodecahedronOverlapTest() [28] 0.00 1.26 1/1 PolyhedraTest() [27] 0.00 0.00 1/1 Algebra::UnitTest() [91]
0.03 0.10 170828/14003920 Imager::SolidObject::Contains(Imager::Vector const&) const [48] 0.04 0.12 205218/14003920 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15] 1.10 3.46 5760000/14003920 Imager::Scene::FindClosestIntersection(Imager::Vector const&, Imager::Vector const&, Imager::Intersection&) const [10] 1.50 4.72 7867874/14003920 Imager::Scene::HasClearLineOfSight(Imager::Vector const&, Imager::Vector const&) const [7]
[4] 58.0 2.67 8.40 14003920 Imager::TriangleMesh::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [4]
8.38 0.00 406030768/406030768 Algebra::SolveLinearEquations(double, double, double, double, double, double, double, double, double, double, double, double, double&, double&, double&) [8] 0.02 0.00 3538132/3538132 Imager::TriangleMesh::NormalVector(Imager::TriangleMesh::Triangle const&) const [70] 0.00 0.00 8/88 std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Intersection*, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > >, Imager::Intersection const&) [117]
8573986 Imager::Scene::TraceRay(Imager::Vector const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [9]
[5] 52.6 0.17 9.87 8573986 Imager::Scene::CalculateLighting(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [5]
0.60 9.17 8534998/8534998 Imager::Scene::CalculateMatte(Imager::Intersection const&) const [6] 0.04 0.04 3522280/3522280 Imager::SolidObject_Reorientable::SurfaceOptics(Imager::Vector const&, void const*) const [53] 0.03 0.00 3617416/3617416 Imager::SolidObject::SurfaceOptics(Imager::Vector const&, void const*) const [66] 0.00 0.00 1395302/1395302 Imager::TriangleMesh::SurfaceOptics(Imager::Vector const&, void const*) const [105] 3262804 Imager::Scene::CalculateRefraction(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int, double&) const <cycle 4> [40] 2906525 Imager::Scene::CalculateReflection(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [58]
0.60 9.17 8534998/8534998 Imager::Scene::CalculateLighting(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [5]
[6] 51.1 0.60 9.17 8534998 Imager::Scene::CalculateMatte(Imager::Intersection const&) const [6]
0.17 9.00 22928551/22928551 Imager::Scene::HasClearLineOfSight(Imager::Vector const&, Imager::Vector const&) const [7]
0.17 9.00 22928551/22928551 Imager::Scene::CalculateMatte(Imager::Intersection const&) const [6]
[7] 48.0 0.17 9.00 22928551 Imager::Scene::HasClearLineOfSight(Imager::Vector const&, Imager::Vector const&) const [7]
1.50 4.72 7867874/14003920 Imager::TriangleMesh::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [4] 0.19 0.83 15801057/50859850 Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [11] 0.84 0.00 38169893/66701722 Imager::Sphere::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [14] 0.00 0.30 2698530/5946530 Imager::SetIntersection::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [30] 0.00 0.30 2698530/11893060 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15] 0.00 0.16 2486753/13944693 Imager::SetUnion::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [29] 0.14 0.00 64537354/83146683 Imager::PickClosestIntersection(std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > const&, Imager::Intersection&) [47]
8.38 0.00 406030768/406030768 Imager::TriangleMesh::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [4]
[8] 43.9 8.38 0.00 406030768 Algebra::SolveLinearEquations(double, double, double, double, double, double, double, double, double, double, double, double, double&, double&, double&) [8]
2906525 Imager::Scene::CalculateReflection(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [58] 3262804 Imager::Scene::CalculateRefraction(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int, double&) const <cycle 4> [40] 0.67 17.36 12440000/12440000 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1]
[9] 39.6 0.20 7.37 18609329 Imager::Scene::TraceRay(Imager::Vector const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [9]
0.21 7.13 18609329/18609329 Imager::Scene::FindClosestIntersection(Imager::Vector const&, Imager::Vector const&, Imager::Intersection&) const [10] 0.04 0.00 18609329/83146683 Imager::PickClosestIntersection(std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > const&, Imager::Intersection&) [47] 8573986 Imager::Scene::CalculateLighting(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [5]
0.21 7.13 18609329/18609329 Imager::Scene::TraceRay(Imager::Vector const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [9]
[10] 38.4 0.21 7.13 18609329 Imager::Scene::FindClosestIntersection(Imager::Vector const&, Imager::Vector const&, Imager::Intersection&) const [10]
1.10 3.46 5760000/14003920 Imager::TriangleMesh::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [4] 0.15 0.64 12094646/50859850 Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [11] 0.57 0.00 25863441/66701722 Imager::Sphere::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [14] 0.01 0.47 7280621/13944693 Imager::SetUnion::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [29] 0.01 0.37 3248000/5946530 Imager::SetIntersection::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [30] 0.01 0.36 3248000/11893060 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15]
0.05 0.22 4177319/50859850 Imager::SetComplement::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [35] 0.06 0.25 4842135/50859850 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15] 0.15 0.64 12094646/50859850 Imager::Scene::FindClosestIntersection(Imager::Vector const&, Imager::Vector const&, Imager::Intersection&) const [10] 0.17 0.73 13944693/50859850 Imager::SetUnion::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [29] 0.19 0.83 15801057/50859850 Imager::Scene::HasClearLineOfSight(Imager::Vector const&, Imager::Vector const&) const [7]
[11] 17.2 0.62 2.67 50859850 Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [11]
1.55 0.33 34580399/34580399 Imager::Cuboid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [13] 0.04 0.49 5171490/5171490 Imager::Torus::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [37] 0.08 0.04 3115245/3115245 Imager::Spheroid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [50] 0.11 0.00 7514037/7514037 Imager::ThinRing::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [51] 0.00 0.04 478679/478679 Imager::Cylinder::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [60]
0.00 2.53 2/2 UnitTests() [3]
[12] 13.3 0.00 2.53 2 TorusTest(char const*, double) [12]
0.04 2.48 2/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 2/6 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88] 0.00 0.00 2/7 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86] 0.00 0.00 2/16 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84] 0.00 0.00 4/73 Imager::SolidObject::Translate(double, double, double) [81] 0.00 0.00 4/21 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90] 0.00 0.00 4/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127] 0.00 0.00 2/18 Imager::SolidObject_Reorientable::RotateX(double) [133] 0.00 0.00 2/15 Imager::Scene::~Scene() [146] 0.00 0.00 2/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132]
1.55 0.33 34580399/34580399 Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [11]
[13] 9.9 1.55 0.33 34580399 Imager::Cuboid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [13]
0.33 0.00 108617482/118023768 Imager::Cuboid::ObjectSpace_Contains(Imager::Vector const&) const [42] 0.00 0.00 9/88 std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Intersection*, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > >, Imager::Intersection const&) [117]
0.02 0.00 1090769/66701722 Imager::SetComplement::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [35] 0.03 0.00 1577619/66701722 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15] 0.57 0.00 25863441/66701722 Imager::Scene::FindClosestIntersection(Imager::Vector const&, Imager::Vector const&, Imager::Intersection&) const [10] 0.84 0.00 38169893/66701722 Imager::Scene::HasClearLineOfSight(Imager::Vector const&, Imager::Vector const&) const [7]
[14] 7.7 1.48 0.00 66701722 Imager::Sphere::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [14]
0.00 0.00 24/88 std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Intersection*, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > >, Imager::Intersection const&) [117]
0.00 0.30 2698530/11893060 Imager::Scene::HasClearLineOfSight(Imager::Vector const&, Imager::Vector const&) const [7] 0.01 0.36 3248000/11893060 Imager::Scene::FindClosestIntersection(Imager::Vector const&, Imager::Vector const&, Imager::Intersection&) const [10] 0.01 0.66 5946530/11893060 Imager::SetIntersection::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [30]
[15] 7.0 0.02 1.32 11893060 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15]
0.01 0.57 5268088/5268088 Imager::SetComplement::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [35] 0.06 0.25 4842135/50859850 Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [11] 0.04 0.12 205218/14003920 Imager::TriangleMesh::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [4] 0.02 0.14 170828/170828 Imager::SolidObject::Contains(Imager::Vector const&) const [48] 0.01 0.04 3170898/3170898 Imager::SetComplement::Contains(Imager::Vector const&) const [57] 0.03 0.00 1577619/66701722 Imager::Sphere::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [14] 0.01 0.01 2068572/9484218 Imager::SolidObject_Reorientable::Contains(Imager::Vector const&) const [52] 0.01 0.00 1497631/11368907 Imager::Sphere::Contains(Imager::Vector const&) const [55] 0.00 0.00 23/88 std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Intersection*, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > >, Imager::Intersection const&) [117]
0.00 1.28 1/1 UnitTests() [3]
[16] 6.7 0.00 1.28 1 ChessBoardTest() [16]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.02 0.00 1/1 Imager::SolidObject_Reorientable::RotateZ(double) [69] 0.00 0.00 1/73 Imager::SolidObject::Translate(double, double, double) [81] 0.00 0.00 3/21 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90] 0.00 0.00 3/6 Imager::Optics::SetOpacity(double) [152] 0.00 0.00 3/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132] 0.00 0.00 3/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127] 0.00 0.00 1/1 Imager::ChessBoard::ChessBoard(double, double, double, double, Imager::Color const&, Imager::Color const&, Imager::Color const&) [172] 0.00 0.00 1/18 Imager::SolidObject_Reorientable::RotateX(double) [133] 0.00 0.00 1/15 Imager::Scene::~Scene() [146]
0.00 1.27 1/1 UnitTests() [3]
[17] 6.6 0.00 1.27 1 BlockTest() [17]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 1/6 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88] 0.00 0.00 1/7 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86] 0.00 0.00 1/16 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84] 0.00 0.00 2/73 Imager::SolidObject::Translate(double, double, double) [81] 0.00 0.00 1/21 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90] 0.00 0.00 1/1425505 Imager::Optics::SetMatteColor(Imager::Color const&) [72] 0.00 0.00 1/1 Imager::Optics::SetGlossColor(Imager::Color const&) [97] 0.00 0.00 3/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127] 0.00 0.00 2/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132] 0.00 0.00 1/6 Imager::Optics::SetOpacity(double) [152] 0.00 0.00 1/15 Imager::Scene::~Scene() [146]
0.00 1.27 1/1 UnitTests() [3]
[18] 6.6 0.00 1.27 1 SaturnTest() [18]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 1/6 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88] 0.00 0.00 1/7 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86] 0.00 0.00 1/16 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84] 0.00 0.00 1/1 Imager::Saturn::CreateRingSystem() [92] 0.00 0.00 1/21 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90] 0.00 0.00 1/15 Imager::Scene::~Scene() [146] 0.00 0.00 1/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127] 0.00 0.00 1/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132]
0.00 1.27 1/1 UnitTests() [3]
[19] 6.6 0.00 1.27 1 SetIntersectionTest() [19]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 1/6 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88] 0.00 0.00 1/7 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86] 0.00 0.00 1/16 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84] 0.00 0.00 2/21 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90] 0.00 0.00 1/15 Imager::Scene::~Scene() [146] 0.00 0.00 1/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132] 0.00 0.00 1/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127]
0.00 1.27 1/1 UnitTests() [3]
[20] 6.6 0.00 1.27 1 BitDonutTest() [20]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 1/6 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88] 0.00 0.00 1/7 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86] 0.00 0.00 1/16 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84] 0.00 0.00 2/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127] 0.00 0.00 1/15 Imager::Scene::~Scene() [146] 0.00 0.00 1/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132]
0.00 1.27 1/1 UnitTests() [3]
[21] 6.6 0.00 1.27 1 SetDifferenceTest() [21]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 1/7 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86] 0.00 0.00 1/16 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84] 0.00 0.00 2/21 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90] 0.00 0.00 1/15 Imager::Scene::~Scene() [146] 0.00 0.00 1/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127] 0.00 0.00 1/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132]
0.00 1.26 1/1 UnitTests() [3]
[22] 6.6 0.00 1.26 1 CuboidTest() [22]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 1/73 Imager::SolidObject::Translate(double, double, double) [81] 0.00 0.00 1/21 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90] 0.00 0.00 1/18 Imager::SolidObject_Reorientable::RotateX(double) [133] 0.00 0.00 1/15 Imager::SolidObject_Reorientable::RotateY(double) [144] 0.00 0.00 1/15 Imager::Scene::~Scene() [146] 0.00 0.00 1/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132] 0.00 0.00 1/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127]
0.00 1.26 1/1 UnitTests() [3]
[23] 6.6 0.00 1.26 1 CylinderTest() [23]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 1/73 Imager::SolidObject::Translate(double, double, double) [81] 0.00 0.00 1/21 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90] 0.00 0.00 1/18 Imager::SolidObject_Reorientable::RotateX(double) [133] 0.00 0.00 1/15 Imager::SolidObject_Reorientable::RotateY(double) [144] 0.00 0.00 1/15 Imager::Scene::~Scene() [146] 0.00 0.00 1/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132] 0.00 0.00 1/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127]
0.00 1.26 1/1 UnitTests() [3]
[24] 6.6 0.00 1.26 1 SpheroidTest() [24]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 1/73 Imager::SolidObject::Translate(double, double, double) [81] 0.00 0.00 2/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127] 0.00 0.00 1/18 Imager::SolidObject_Reorientable::RotateX(double) [133] 0.00 0.00 1/15 Imager::SolidObject_Reorientable::RotateY(double) [144] 0.00 0.00 1/15 Imager::Scene::~Scene() [146] 0.00 0.00 1/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132]
0.00 1.26 1/1 UnitTests() [3]
[25] 6.6 0.00 1.26 1 MultipleSphereTest() [25]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 2/21 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90] 0.00 0.00 3/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127] 0.00 0.00 2/6 Imager::Optics::SetOpacity(double) [152] 0.00 0.00 2/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132] 0.00 0.00 1/15 Imager::Scene::~Scene() [146]
<spontaneous>
[26] 6.6 0.00 1.26 SphereTest() [26]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 1/21 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90] 0.00 0.00 1/15 Imager::Scene::~Scene() [146] 0.00 0.00 1/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132] 0.00 0.00 1/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127]
0.00 1.26 1/1 UnitTests() [3]
[27] 6.6 0.00 1.26 1 PolyhedraTest() [27]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 3/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127] 0.00 0.00 2/3 Imager::TriangleMesh::RotateY(double) [158] 0.00 0.00 2/3 Imager::TriangleMesh::RotateX(double) [157] 0.00 0.00 2/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132] 0.00 0.00 1/1 Imager::Icosahedron::Icosahedron(Imager::Vector, double, Imager::Optics const&) [174] 0.00 0.00 1/2 Imager::Dodecahedron::Dodecahedron(Imager::Vector, double, Imager::Optics const&) [163] 0.00 0.00 1/15 Imager::Scene::~Scene() [146]
0.00 1.26 1/1 UnitTests() [3]
[28] 6.6 0.00 1.26 1 DodecahedronOverlapTest() [28]
0.02 1.24 1/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1] 0.00 0.00 3/29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127] 0.00 0.00 1/2 Imager::Dodecahedron::Dodecahedron(Imager::Vector, double, Imager::Optics const&) [163] 0.00 0.00 1/3 Imager::TriangleMesh::RotateX(double) [157] 0.00 0.00 1/3 Imager::TriangleMesh::RotateY(double) [158] 0.00 0.00 1/15 Imager::Scene::~Scene() [146] 0.00 0.00 1/20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132]
0.00 0.16 2486753/13944693 Imager::Scene::HasClearLineOfSight(Imager::Vector const&, Imager::Vector const&) const [7] 0.01 0.27 4177319/13944693 Imager::SetComplement::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [35] 0.01 0.47 7280621/13944693 Imager::Scene::FindClosestIntersection(Imager::Vector const&, Imager::Vector const&, Imager::Intersection&) const [10]
[29] 4.8 0.02 0.90 13944693 Imager::SetUnion::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [29]
0.17 0.73 13944693/50859850 Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [11]
0.00 0.30 2698530/5946530 Imager::Scene::HasClearLineOfSight(Imager::Vector const&, Imager::Vector const&) const [7] 0.01 0.37 3248000/5946530 Imager::Scene::FindClosestIntersection(Imager::Vector const&, Imager::Vector const&, Imager::Intersection&) const [10]
[30] 3.6 0.01 0.67 5946530 Imager::SetIntersection::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [30]
0.01 0.66 5946530/11893060 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15]
0.00 0.62 15/15 lodepng_encode_memory(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [32]
[31] 3.2 0.00 0.62 15 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
0.00 0.51 15/15 lodepng_zlib_compress(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [38] 0.01 0.05 3721/17010 addBitsToStreamReversed(unsigned long*, ucvector*, unsigned int, unsigned long) [45] 0.01 0.01 15/15 lodepng_convert(unsigned char*, unsigned char const*, LodePNGColorMode*, LodePNGColorMode*, unsigned int, unsigned int) [67] 0.01 0.00 627238/627238 color_tree_has(ColorTree*, unsigned char, unsigned char, unsigned char, unsigned char) [76] 0.00 0.01 30/45 lodepng_add32bitInt(ucvector*, unsigned int) [73] 0.01 0.00 1841000/3682000 getPixelColorRGBA8(unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char const*, unsigned long, LodePNGColorMode const*) [74] 0.00 0.00 195/738585 ucvector_push_back(ucvector*, unsigned char) [39] 0.00 0.00 607/607 lodepng_palette_add(LodePNGColorMode*, unsigned char, unsigned char, unsigned char, unsigned char) [112] 0.00 0.00 48/48 addUnknownChunks(ucvector*, unsigned char*, unsigned long) [120] 0.00 0.00 45/45 lodepng_chunk_create(unsigned char**, unsigned long*, unsigned int, char const*, unsigned char const*) [121] 0.00 0.00 30/30 checkColorValidity(LodePNGColorType, unsigned int) [126] 0.00 0.00 15/30 lodepng_info_init(LodePNGInfo*) [125] 0.00 0.00 15/15 lodepng_info_copy(LodePNGInfo*, LodePNGInfo const*) [136] 0.00 0.00 15/15 lodepng_can_have_alpha(LodePNGColorMode const*) [139] 0.00 0.00 15/406979 lodepng_color_mode_equal(LodePNGColorMode const*, LodePNGColorMode const*) [107] 0.00 0.00 15/45 lodepng_info_cleanup(LodePNGInfo*) [122] 0.00 0.00 15/15 preProcessScanlines(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGInfo const*, LodePNGEncoderSettings const*) [143] 0.00 0.00 15/15 zlib_compress(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [141]
0.00 0.62 15/15 lodepng::encode(std::vector<unsigned char, std::allocator<unsigned char> >&, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [34]
[32] 3.2 0.00 0.62 15 lodepng_encode_memory(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [32]
0.00 0.62 15/15 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31] 0.00 0.00 15/15 lodepng_state_init(LodePNGState*) [137] 0.00 0.00 15/45 lodepng_info_cleanup(LodePNGInfo*) [122] 0.00 0.00 15/15 lodepng_state_cleanup(LodePNGState*) [138]
0.00 0.62 15/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1]
[33] 3.2 0.00 0.62 15 lodepng::encode(std::string const&, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [33]
0.00 0.62 15/15 lodepng::encode(std::vector<unsigned char, std::allocator<unsigned char> >&, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [34] 0.00 0.00 15/15 lodepng::save_file(std::vector<unsigned char, std::allocator<unsigned char> > const&, std::string const&) [148]
0.00 0.62 15/15 lodepng::encode(std::string const&, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [33]
[34] 3.2 0.00 0.62 15 lodepng::encode(std::vector<unsigned char, std::allocator<unsigned char> >&, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [34]
0.00 0.62 15/15 lodepng_encode_memory(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [32] 0.00 0.00 15/15 void std::vector<unsigned char, std::allocator<unsigned char> >::_M_range_insert<unsigned char*>(__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >, unsigned char*, unsigned char*, std::forward_iterator_tag) [149]
0.01 0.57 5268088/5268088 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15]
[35] 3.0 0.01 0.57 5268088 Imager::SetComplement::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [35]
0.01 0.27 4177319/13944693 Imager::SetUnion::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [29] 0.05 0.22 4177319/50859850 Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [11] 0.02 0.00 1090769/66701722 Imager::Sphere::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [14]
0.01 0.00 15/594 lodepng_add32bitInt(ucvector*, unsigned int) [73] 0.07 0.00 81/594 lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [43] 0.42 0.03 498/594 ucvector_push_back(ucvector*, unsigned char) [39]
[36] 2.8 0.51 0.03 594 encodeLZ77(uivector*, Hash*, unsigned char const*, unsigned long, unsigned long, unsigned int) [36]
0.03 0.00 5088067/5088067 string_set(char**, char const*) [64] 0.00 0.00 652842/1447152 uivector_push_back(uivector*, unsigned int) [104] 0.00 0.00 255938/255938 searchCodeIndex(unsigned int const*, unsigned long, unsigned long) [108]
0.04 0.49 5171490/5171490 Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [11]
[37] 2.8 0.04 0.49 5171490 Imager::Torus::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [37]
0.08 0.29 5171490/5171490 Imager::Torus::SolveIntersections(Imager::Vector const&, Imager::Vector const&, double*) const [41] 0.12 0.00 1966663/1966663 Imager::Torus::SurfaceNormal(Imager::Vector const&) const [49] 0.00 0.00 13/88 std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Intersection*, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > >, Imager::Intersection const&) [117]
0.00 0.51 15/15 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[38] 2.7 0.00 0.51 15 lodepng_zlib_compress(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [38]
0.00 0.28 15/15 lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [43] 0.00 0.22 369210/738585 ucvector_push_back(ucvector*, unsigned char) [39] 0.00 0.00 15/45 lodepng_add32bitInt(ucvector*, unsigned int) [73] 0.00 0.00 15/15 update_adler32(unsigned int, unsigned char const*, unsigned int) [clone .constprop.61] [142]
0.00 0.00 195/738585 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31] 0.00 0.22 369180/738585 addBitToStream(unsigned long*, ucvector*, unsigned char) [46] 0.00 0.22 369210/738585 lodepng_zlib_compress(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [38]
[39] 2.3 0.00 0.45 738585 ucvector_push_back(ucvector*, unsigned char) [39]
0.42 0.03 498/594 encodeLZ77(uivector*, Hash*, unsigned char const*, unsigned long, unsigned long, unsigned int) [36]
3262804 Imager::Scene::CalculateLighting(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [5]
[40] 1.9 0.25 0.12 3262804 Imager::Scene::CalculateRefraction(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int, double&) const <cycle 4> [40]
0.05 0.00 9132218/11368907 Imager::Sphere::Contains(Imager::Vector const&) const [55] 0.02 0.01 3203808/9484218 Imager::SolidObject_Reorientable::Contains(Imager::Vector const&) const [52] 0.03 0.00 3262804/6856730 Algebra::SolveQuadraticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [56] 0.01 0.00 3262804/12028218 Algebra::FilterRealNumbers(int, std::complex<double> const*, double*) [59] 3262804 Imager::Scene::TraceRay(Imager::Vector const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [9]
0.08 0.29 5171490/5171490 Imager::Torus::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [37]
[41] 1.9 0.08 0.29 5171490 Imager::Torus::SolveIntersections(Imager::Vector const&, Imager::Vector const&, double*) const [41]
0.24 0.03 5171490/5171493 Algebra::SolveQuarticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [44] 0.02 0.00 5171490/12028218 Algebra::FilterRealNumbers(int, std::complex<double> const*, double*) [59]
0.03 0.00 9406286/118023768 Imager::SolidObject_Reorientable::Contains(Imager::Vector const&) const [52] 0.33 0.00 108617482/118023768 Imager::Cuboid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [13]
[42] 1.9 0.36 0.00 118023768 Imager::Cuboid::ObjectSpace_Contains(Imager::Vector const&) const [42]
0.00 0.28 15/15 lodepng_zlib_compress(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [38]
[43] 1.5 0.00 0.28 15 lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [43]
0.02 0.17 12676/17010 addBitsToStreamReversed(unsigned long*, ucvector*, unsigned int, unsigned long) [45] 0.07 0.00 81/594 encodeLZ77(uivector*, Hash*, unsigned char const*, unsigned long, unsigned long, unsigned int) [36] 0.00 0.01 243/243 HuffmanTree_makeFromFrequencies(HuffmanTree*, unsigned int const*, unsigned long, unsigned int) [80] 0.00 0.00 9043/2953369 addBitToStream(unsigned long*, ucvector*, unsigned char) [46] 0.00 0.00 39141/1447152 uivector_push_back(uivector*, unsigned int) [104] 0.00 0.00 243/729 uivector_resizev(uivector*, unsigned long, unsigned int) [clone .constprop.64] [111] 0.00 0.00 243/243 HuffmanTree_cleanup(HuffmanTree*) [113] 0.00 0.00 243/243 HuffmanTree_makeFromLengths2(HuffmanTree*) [114] 0.00 0.00 81/406979 lodepng_color_mode_equal(LodePNGColorMode const*, LodePNGColorMode const*) [107]
0.00 0.00 3/5171493 Algebra::TestKnownQuarticRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) [93] 0.24 0.03 5171490/5171493 Imager::Torus::SolveIntersections(Imager::Vector const&, Imager::Vector const&, double*) const [41]
[44] 1.4 0.24 0.03 5171493 Algebra::SolveQuarticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [44]
0.03 0.00 5171286/5171292 Algebra::cbrt(std::complex<double>, int) [62]
3050925 addBitsToStreamReversed(unsigned long*, ucvector*, unsigned int, unsigned long) [45] 0.00 0.01 613/17010 lodepng_convert(unsigned char*, unsigned char const*, LodePNGColorMode*, LodePNGColorMode*, unsigned int, unsigned int) [67] 0.01 0.05 3721/17010 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31] 0.02 0.17 12676/17010 lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [43]
[45] 1.4 0.03 0.23 17010+3050925 addBitsToStreamReversed(unsigned long*, ucvector*, unsigned int, unsigned long) [45]
0.01 0.22 2944326/2953369 addBitToStream(unsigned long*, ucvector*, unsigned char) [46] 3050925 addBitsToStreamReversed(unsigned long*, ucvector*, unsigned int, unsigned long) [45]
0.00 0.00 9043/2953369 lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [43] 0.01 0.22 2944326/2953369 addBitsToStreamReversed(unsigned long*, ucvector*, unsigned int, unsigned long) [45]
[46] 1.2 0.01 0.22 2953369 addBitToStream(unsigned long*, ucvector*, unsigned char) [46]
0.00 0.22 369180/738585 ucvector_push_back(ucvector*, unsigned char) [39]
0.04 0.00 18609329/83146683 Imager::Scene::TraceRay(Imager::Vector const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [9] 0.14 0.00 64537354/83146683 Imager::Scene::HasClearLineOfSight(Imager::Vector const&, Imager::Vector const&) const [7]
[47] 0.9 0.18 0.00 83146683 Imager::PickClosestIntersection(std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > const&, Imager::Intersection&) [47]
0.02 0.14 170828/170828 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15]
[48] 0.8 0.02 0.14 170828 Imager::SolidObject::Contains(Imager::Vector const&) const [48]
0.03 0.10 170828/14003920 Imager::TriangleMesh::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [4]
0.12 0.00 1966663/1966663 Imager::Torus::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [37]
[49] 0.6 0.12 0.00 1966663 Imager::Torus::SurfaceNormal(Imager::Vector const&) const [49]
0.08 0.04 3115245/3115245 Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [11]
[50] 0.6 0.08 0.04 3115245 Imager::Spheroid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [50]
0.03 0.00 3115245/6856730 Algebra::SolveQuadraticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [56] 0.01 0.00 3115245/12028218 Algebra::FilterRealNumbers(int, std::complex<double> const*, double*) [59] 0.00 0.00 6/88 std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Intersection*, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > >, Imager::Intersection const&) [117]
0.11 0.00 7514037/7514037 Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [11]
[51] 0.6 0.11 0.00 7514037 Imager::ThinRing::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [51]
0.00 0.00 2/88 std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Intersection*, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > >, Imager::Intersection const&) [117]
0.01 0.01 1779998/9484218 Imager::SetComplement::Contains(Imager::Vector const&) const [57] 0.01 0.01 2068572/9484218 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15] 0.01 0.01 2431840/9484218 Imager::SetUnion::Contains(Imager::Vector const&) const [68] 0.02 0.01 3203808/9484218 Imager::Scene::CalculateRefraction(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int, double&) const <cycle 4> [40]
[52] 0.5 0.05 0.04 9484218 Imager::SolidObject_Reorientable::Contains(Imager::Vector const&) const [52]
0.03 0.00 9406286/118023768 Imager::Cuboid::ObjectSpace_Contains(Imager::Vector const&) const [42] 0.01 0.00 77932/77932 Imager::Torus::ObjectSpace_Contains(Imager::Vector const&) const [77]
0.04 0.04 3522280/3522280 Imager::Scene::CalculateLighting(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [5]
[53] 0.4 0.04 0.04 3522280 Imager::SolidObject_Reorientable::SurfaceOptics(Imager::Vector const&, void const*) const [53]
0.01 0.02 1425504/1425504 Imager::ChessBoard::ObjectSpace_SurfaceOptics(Imager::Vector const&, void const*) const [65] 0.01 0.00 2096776/2096776 Imager::SolidObject_Reorientable::ObjectSpace_SurfaceOptics(Imager::Vector const&, void const*) const [75]
<spontaneous>
[54] 0.3 0.07 0.00 Imager::Scene::PolarizedReflection(double, double, double, double) const [54]
0.00 0.00 739058/11368907 Imager::SetComplement::Contains(Imager::Vector const&) const [57] 0.01 0.00 1497631/11368907 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15] 0.05 0.00 9132218/11368907 Imager::Scene::CalculateRefraction(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int, double&) const <cycle 4> [40]
[55] 0.3 0.06 0.00 11368907 Imager::Sphere::Contains(Imager::Vector const&) const [55]
0.00 0.00 2/6856730 Algebra::TestKnownQuadraticRoots(std::complex<double>, std::complex<double>, std::complex<double>) [96] 0.00 0.00 478679/6856730 Imager::Cylinder::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [60] 0.03 0.00 3115245/6856730 Imager::Spheroid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [50] 0.03 0.00 3262804/6856730 Imager::Scene::CalculateRefraction(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int, double&) const <cycle 4> [40]
[56] 0.3 0.06 0.00 6856730 Algebra::SolveQuadraticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [56]
0.01 0.04 3170898/3170898 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15]
[57] 0.3 0.01 0.04 3170898 Imager::SetComplement::Contains(Imager::Vector const&) const [57]
0.00 0.02 2431840/2431840 Imager::SetUnion::Contains(Imager::Vector const&) const [68] 0.01 0.01 1779998/9484218 Imager::SolidObject_Reorientable::Contains(Imager::Vector const&) const [52] 0.00 0.00 739058/11368907 Imager::Sphere::Contains(Imager::Vector const&) const [55]
2906525 Imager::Scene::CalculateLighting(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [5]
[58] 0.3 0.05 0.00 2906525 Imager::Scene::CalculateReflection(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [58]
2906525 Imager::Scene::TraceRay(Imager::Vector const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [9]
0.00 0.00 478679/12028218 Imager::Cylinder::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [60] 0.01 0.00 3115245/12028218 Imager::Spheroid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [50] 0.01 0.00 3262804/12028218 Imager::Scene::CalculateRefraction(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int, double&) const <cycle 4> [40] 0.02 0.00 5171490/12028218 Imager::Torus::SolveIntersections(Imager::Vector const&, Imager::Vector const&, double*) const [41]
[59] 0.2 0.04 0.00 12028218 Algebra::FilterRealNumbers(int, std::complex<double> const*, double*) [59]
0.00 0.04 478679/478679 Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [11]
[60] 0.2 0.00 0.04 478679 Imager::Cylinder::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [60]
0.03 0.00 957358/957358 Imager::Cylinder::AppendDiskIntersection(Imager::Vector const&, Imager::Vector const&, double, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [63] 0.00 0.00 478679/6856730 Algebra::SolveQuadraticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [56] 0.00 0.00 478679/12028218 Algebra::FilterRealNumbers(int, std::complex<double> const*, double*) [59] 0.00 0.00 1/88 std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Intersection*, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > >, Imager::Intersection const&) [117]
<spontaneous>
[61] 0.2 0.03 0.00 frame_dummy [61]
0.00 0.00 6/5171292 Algebra::SolveCubicEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [94] 0.03 0.00 5171286/5171292 Algebra::SolveQuarticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [44]
[62] 0.2 0.03 0.00 5171292 Algebra::cbrt(std::complex<double>, int) [62]
0.03 0.00 957358/957358 Imager::Cylinder::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [60]
[63] 0.2 0.03 0.00 957358 Imager::Cylinder::AppendDiskIntersection(Imager::Vector const&, Imager::Vector const&, double, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [63]
0.00 0.00 2/88 std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Intersection*, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > >, Imager::Intersection const&) [117]
0.03 0.00 5088067/5088067 encodeLZ77(uivector*, Hash*, unsigned char const*, unsigned long, unsigned long, unsigned int) [36]
[64] 0.2 0.03 0.00 5088067 string_set(char**, char const*) [64]
0.01 0.02 1425504/1425504 Imager::SolidObject_Reorientable::SurfaceOptics(Imager::Vector const&, void const*) const [53]
[65] 0.2 0.01 0.02 1425504 Imager::ChessBoard::ObjectSpace_SurfaceOptics(Imager::Vector const&, void const*) const [65]
0.00 0.02 1425504/1425505 Imager::Optics::SetMatteColor(Imager::Color const&) [72] 0.00 0.00 1137648/1137648 Imager::ChessBoard::SquareCoordinate(double) const [106]
0.03 0.00 3617416/3617416 Imager::Scene::CalculateLighting(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [5]
[66] 0.1 0.03 0.00 3617416 Imager::SolidObject::SurfaceOptics(Imager::Vector const&, void const*) const [66]
0.01 0.01 15/15 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[67] 0.1 0.01 0.01 15 lodepng_convert(unsigned char*, unsigned char const*, LodePNGColorMode*, LodePNGColorMode*, unsigned int, unsigned int) [67]
0.00 0.01 613/17010 addBitsToStreamReversed(unsigned long*, ucvector*, unsigned int, unsigned long) [45] 0.01 0.00 1841000/3682000 getPixelColorRGBA8(unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char const*, unsigned long, LodePNGColorMode const*) [74] 0.00 0.00 15/406979 lodepng_color_mode_equal(LodePNGColorMode const*, LodePNGColorMode const*) [107]
0.00 0.02 2431840/2431840 Imager::SetComplement::Contains(Imager::Vector const&) const [57]
[68] 0.1 0.00 0.02 2431840 Imager::SetUnion::Contains(Imager::Vector const&) const [68]
0.01 0.01 2431840/9484218 Imager::SolidObject_Reorientable::Contains(Imager::Vector const&) const [52]
0.02 0.00 1/1 ChessBoardTest() [16]
[69] 0.1 0.02 0.00 1 Imager::SolidObject_Reorientable::RotateZ(double) [69]
0.02 0.00 3538132/3538132 Imager::TriangleMesh::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [4]
[70] 0.1 0.02 0.00 3538132 Imager::TriangleMesh::NormalVector(Imager::TriangleMesh::Triangle const&) const [70]
0.00 0.00 1/1425590 Imager::Optics::SetGlossColor(Imager::Color const&) [97] 0.00 0.00 84/1425590 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90] 0.02 0.00 1425505/1425590 Imager::Optics::SetMatteColor(Imager::Color const&) [72]
[71] 0.1 0.02 0.00 1425590 Imager::Optics::ValidateReflectionColor(Imager::Color const&) const [71]
0.00 0.00 1/1425505 BlockTest() [17] 0.00 0.02 1425504/1425505 Imager::ChessBoard::ObjectSpace_SurfaceOptics(Imager::Vector const&, void const*) const [65]
[72] 0.1 0.00 0.02 1425505 Imager::Optics::SetMatteColor(Imager::Color const&) [72]
0.02 0.00 1425505/1425590 Imager::Optics::ValidateReflectionColor(Imager::Color const&) const [71]
0.00 0.00 15/45 lodepng_zlib_compress(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [38] 0.00 0.01 30/45 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[73] 0.1 0.00 0.01 45 lodepng_add32bitInt(ucvector*, unsigned int) [73]
0.01 0.00 15/594 encodeLZ77(uivector*, Hash*, unsigned char const*, unsigned long, unsigned long, unsigned int) [36]
0.01 0.00 1841000/3682000 lodepng_convert(unsigned char*, unsigned char const*, LodePNGColorMode*, LodePNGColorMode*, unsigned int, unsigned int) [67] 0.01 0.00 1841000/3682000 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[74] 0.1 0.01 0.00 3682000 getPixelColorRGBA8(unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char const*, unsigned long, LodePNGColorMode const*) [74]
0.01 0.00 2096776/2096776 Imager::SolidObject_Reorientable::SurfaceOptics(Imager::Vector const&, void const*) const [53]
[75] 0.1 0.01 0.00 2096776 Imager::SolidObject_Reorientable::ObjectSpace_SurfaceOptics(Imager::Vector const&, void const*) const [75]
0.01 0.00 627238/627238 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[76] 0.1 0.01 0.00 627238 color_tree_has(ColorTree*, unsigned char, unsigned char, unsigned char, unsigned char) [76]
0.01 0.00 77932/77932 Imager::SolidObject_Reorientable::Contains(Imager::Vector const&) const [52]
[77] 0.1 0.01 0.00 77932 Imager::Torus::ObjectSpace_Contains(Imager::Vector const&) const [77]
0.01 0.00 3016/3016 lodepng_huffman_code_lengths(unsigned int*, unsigned int const*, unsigned long, unsigned int) [79]
[78] 0.1 0.01 0.00 3016 sort_coins(Coin*, unsigned long) [78]
0.00 0.01 243/243 HuffmanTree_makeFromFrequencies(HuffmanTree*, unsigned int const*, unsigned long, unsigned int) [80]
[79] 0.1 0.00 0.01 243 lodepng_huffman_code_lengths(unsigned int*, unsigned int const*, unsigned long, unsigned int) [79]
0.01 0.00 3016/3016 sort_coins(Coin*, unsigned long) [78] 0.00 0.00 573312/1447152 uivector_push_back(uivector*, unsigned int) [104] 0.00 0.00 167321/406979 lodepng_color_mode_equal(LodePNGColorMode const*, LodePNGColorMode const*) [107] 0.00 0.00 3245/3245 cleanup_coins(Coin*, unsigned long) [109] 0.00 0.00 2787/2787 append_symbol_coins(Coin*, unsigned int const*, unsigned int, unsigned long) [110]
0.00 0.01 243/243 lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [43]
[80] 0.1 0.00 0.01 243 HuffmanTree_makeFromFrequencies(HuffmanTree*, unsigned int const*, unsigned long, unsigned int) [80]
0.00 0.01 243/243 lodepng_huffman_code_lengths(unsigned int*, unsigned int const*, unsigned long, unsigned int) [79]
0.00 0.00 1/73 CuboidTest() [22] 0.00 0.00 1/73 CylinderTest() [23] 0.00 0.00 1/73 SpheroidTest() [24] 0.00 0.00 1/73 ChessBoardTest() [16] 0.00 0.00 2/73 BlockTest() [17] 0.00 0.00 4/73 TorusTest(char const*, double) [12] 0.00 0.00 5/73 Imager::SetComplement::Translate(double, double, double) <cycle 1> [89] 0.00 0.00 14/73 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88] 0.00 0.00 15/73 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86] 0.00 0.00 29/73 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84]
[81] 0.1 0.01 0.00 73 Imager::SolidObject::Translate(double, double, double) [81]
<spontaneous>
[82] 0.0 0.01 0.00 Imager::SolidObject_BinaryOperator::RotateZ(double) [82]
[83] 0.0 0.00 0.00 16+6 <cycle 1 as a whole> [83]
0.00 0.00 14+4 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84] 0.00 0.00 8 Imager::SetComplement::Translate(double, double, double) <cycle 1> [89]
4 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84] 3 Imager::SetComplement::Translate(double, double, double) <cycle 1> [89] 0.00 0.00 1/16 SetDifferenceTest() [21] 0.00 0.00 1/16 SetIntersectionTest() [19] 0.00 0.00 1/16 BitDonutTest() [20] 0.00 0.00 1/16 SaturnTest() [18] 0.00 0.00 1/16 BlockTest() [17] 0.00 0.00 2/16 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86] 0.00 0.00 2/16 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88] 0.00 0.00 2/16 TorusTest(char const*, double) [12]
[84] 0.0 0.00 0.00 14+4 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84]
0.00 0.00 29/73 Imager::SolidObject::Translate(double, double, double) [81] 3 Imager::SetComplement::Translate(double, double, double) <cycle 1> [89] 4 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84]
[85] 0.0 0.00 0.00 7+26 <cycle 3 as a whole> [85]
0.00 0.00 10 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86] 0.00 0.00 20 Imager::SolidObject_BinaryOperator::NestedRotateY(Imager::SolidObject&, double, double, double) <cycle 3> [130] 0.00 0.00 3 Imager::SetComplement::RotateY(double) <cycle 3> [159]
1 Imager::SetComplement::RotateY(double) <cycle 3> [159] 2 Imager::SolidObject_BinaryOperator::NestedRotateY(Imager::SolidObject&, double, double, double) <cycle 3> [130] 0.00 0.00 1/7 SetDifferenceTest() [21] 0.00 0.00 1/7 SetIntersectionTest() [19] 0.00 0.00 1/7 BitDonutTest() [20] 0.00 0.00 1/7 SaturnTest() [18] 0.00 0.00 1/7 BlockTest() [17] 0.00 0.00 2/7 TorusTest(char const*, double) [12]
[86] 0.0 0.00 0.00 10 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86]
0.00 0.00 15/73 Imager::SolidObject::Translate(double, double, double) [81] 0.00 0.00 3/16 Imager::SetComplement::Translate(double, double, double) <cycle 1> [89] 0.00 0.00 2/16 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84] 20 Imager::SolidObject_BinaryOperator::NestedRotateY(Imager::SolidObject&, double, double, double) <cycle 3> [130]
[87] 0.0 0.00 0.00 6+23 <cycle 2 as a whole> [87]
0.00 0.00 9 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88] 0.00 0.00 18 Imager::SolidObject_BinaryOperator::NestedRotateX(Imager::SolidObject&, double, double, double) <cycle 2> [134] 0.00 0.00 2 Imager::SetComplement::RotateX(double) <cycle 2> [165]
1 Imager::SetComplement::RotateX(double) <cycle 2> [165] 2 Imager::SolidObject_BinaryOperator::NestedRotateX(Imager::SolidObject&, double, double, double) <cycle 2> [134] 0.00 0.00 1/6 SetIntersectionTest() [19] 0.00 0.00 1/6 BitDonutTest() [20] 0.00 0.00 1/6 SaturnTest() [18] 0.00 0.00 1/6 BlockTest() [17] 0.00 0.00 2/6 TorusTest(char const*, double) [12]
[88] 0.0 0.00 0.00 9 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88]
0.00 0.00 14/73 Imager::SolidObject::Translate(double, double, double) [81] 0.00 0.00 2/16 Imager::SetComplement::Translate(double, double, double) <cycle 1> [89] 0.00 0.00 2/16 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84] 18 Imager::SolidObject_BinaryOperator::NestedRotateX(Imager::SolidObject&, double, double, double) <cycle 2> [134]
3 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84] 0.00 0.00 2/16 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88] 0.00 0.00 3/16 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86]
[89] 0.0 0.00 0.00 8 Imager::SetComplement::Translate(double, double, double) <cycle 1> [89]
0.00 0.00 5/73 Imager::SolidObject::Translate(double, double, double) [81] 3 Imager::SolidObject_BinaryOperator::Translate(double, double, double) <cycle 1> [84]
0.00 0.00 1/21 SphereTest() [26] 0.00 0.00 1/21 CuboidTest() [22] 0.00 0.00 1/21 CylinderTest() [23] 0.00 0.00 1/21 SaturnTest() [18] 0.00 0.00 1/21 BlockTest() [17] 0.00 0.00 2/21 SetDifferenceTest() [21] 0.00 0.00 2/21 SetIntersectionTest() [19] 0.00 0.00 2/21 MultipleSphereTest() [25] 0.00 0.00 3/21 ChessBoardTest() [16] 0.00 0.00 3/21 Imager::Saturn::CreateRingSystem() [92] 0.00 0.00 4/21 TorusTest(char const*, double) [12]
[90] 0.0 0.00 0.00 21 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90]
0.00 0.00 84/1425590 Imager::Optics::ValidateReflectionColor(Imager::Color const&) const [71]
0.00 0.00 1/1 UnitTests() [3]
[91] 0.0 0.00 0.00 1 Algebra::UnitTest() [91]
0.00 0.00 3/3 Algebra::TestKnownQuarticRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) [93] 0.00 0.00 2/2 Algebra::TestKnownCubicRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) [95] 0.00 0.00 2/2 Algebra::TestKnownQuadraticRoots(std::complex<double>, std::complex<double>, std::complex<double>) [96]
0.00 0.00 1/1 SaturnTest() [18]
[92] 0.0 0.00 0.00 1 Imager::Saturn::CreateRingSystem() [92]
0.00 0.00 3/21 Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [90]
0.00 0.00 3/3 Algebra::UnitTest() [91]
[93] 0.0 0.00 0.00 3 Algebra::TestKnownQuarticRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) [93]
0.00 0.00 3/5171493 Algebra::SolveQuarticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [44] 0.00 0.00 12/22 Algebra::ValidatePolynomial(int, std::complex<double> const*, std::complex<double>) [129] 0.00 0.00 3/7 Algebra::CheckRoots(int, std::complex<double> const*, std::complex<double> const*) [151]
0.00 0.00 2/2 Algebra::TestKnownCubicRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) [95]
[94] 0.0 0.00 0.00 2 Algebra::SolveCubicEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [94]
0.00 0.00 6/5171292 Algebra::cbrt(std::complex<double>, int) [62]
0.00 0.00 2/2 Algebra::UnitTest() [91]
[95] 0.0 0.00 0.00 2 Algebra::TestKnownCubicRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) [95]
0.00 0.00 2/2 Algebra::SolveCubicEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [94] 0.00 0.00 6/22 Algebra::ValidatePolynomial(int, std::complex<double> const*, std::complex<double>) [129] 0.00 0.00 2/7 Algebra::CheckRoots(int, std::complex<double> const*, std::complex<double> const*) [151]
0.00 0.00 2/2 Algebra::UnitTest() [91]
[96] 0.0 0.00 0.00 2 Algebra::TestKnownQuadraticRoots(std::complex<double>, std::complex<double>, std::complex<double>) [96]
0.00 0.00 2/6856730 Algebra::SolveQuadraticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [56] 0.00 0.00 4/22 Algebra::ValidatePolynomial(int, std::complex<double> const*, std::complex<double>) [129] 0.00 0.00 2/7 Algebra::CheckRoots(int, std::complex<double> const*, std::complex<double> const*) [151]
0.00 0.00 1/1 BlockTest() [17]
[97] 0.0 0.00 0.00 1 Imager::Optics::SetGlossColor(Imager::Color const&) [97]
0.00 0.00 1/1425590 Imager::Optics::ValidateReflectionColor(Imager::Color const&) const [71]
0.00 0.00 39141/1447152 lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [43] 0.00 0.00 181857/1447152 append_symbol_coins(Coin*, unsigned int const*, unsigned int, unsigned long) [110] 0.00 0.00 573312/1447152 lodepng_huffman_code_lengths(unsigned int*, unsigned int const*, unsigned long, unsigned int) [79] 0.00 0.00 652842/1447152 encodeLZ77(uivector*, Hash*, unsigned char const*, unsigned long, unsigned long, unsigned int) [36]
[104] 0.0 0.00 0.00 1447152 uivector_push_back(uivector*, unsigned int) [104]
0.00 0.00 238818/406979 lodepng_color_mode_equal(LodePNGColorMode const*, LodePNGColorMode const*) [107]
0.00 0.00 1395302/1395302 Imager::Scene::CalculateLighting(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const <cycle 4> [5]
[105] 0.0 0.00 0.00 1395302 Imager::TriangleMesh::SurfaceOptics(Imager::Vector const&, void const*) const [105]
0.00 0.00 1137648/1137648 Imager::ChessBoard::ObjectSpace_SurfaceOptics(Imager::Vector const&, void const*) const [65]
[106] 0.0 0.00 0.00 1137648 Imager::ChessBoard::SquareCoordinate(double) const [106]
0.00 0.00 15/406979 lodepng_convert(unsigned char*, unsigned char const*, LodePNGColorMode*, LodePNGColorMode*, unsigned int, unsigned int) [67] 0.00 0.00 15/406979 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31] 0.00 0.00 81/406979 lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [43] 0.00 0.00 729/406979 uivector_resizev(uivector*, unsigned long, unsigned int) [clone .constprop.64] [111] 0.00 0.00 167321/406979 lodepng_huffman_code_lengths(unsigned int*, unsigned int const*, unsigned long, unsigned int) [79] 0.00 0.00 238818/406979 uivector_push_back(uivector*, unsigned int) [104]
[107] 0.0 0.00 0.00 406979 lodepng_color_mode_equal(LodePNGColorMode const*, LodePNGColorMode const*) [107]
0.00 0.00 255938/255938 encodeLZ77(uivector*, Hash*, unsigned char const*, unsigned long, unsigned long, unsigned int) [36]
[108] 0.0 0.00 0.00 255938 searchCodeIndex(unsigned int const*, unsigned long, unsigned long) [108]
0.00 0.00 3245/3245 lodepng_huffman_code_lengths(unsigned int*, unsigned int const*, unsigned long, unsigned int) [79]
[109] 0.0 0.00 0.00 3245 cleanup_coins(Coin*, unsigned long) [109]
0.00 0.00 2787/2787 lodepng_huffman_code_lengths(unsigned int*, unsigned int const*, unsigned long, unsigned int) [79]
[110] 0.0 0.00 0.00 2787 append_symbol_coins(Coin*, unsigned int const*, unsigned int, unsigned long) [110]
0.00 0.00 181857/1447152 uivector_push_back(uivector*, unsigned int) [104]
0.00 0.00 243/729 lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [43] 0.00 0.00 486/729 HuffmanTree_makeFromLengths2(HuffmanTree*) [114]
[111] 0.0 0.00 0.00 729 uivector_resizev(uivector*, unsigned long, unsigned int) [clone .constprop.64] [111]
0.00 0.00 729/406979 lodepng_color_mode_equal(LodePNGColorMode const*, LodePNGColorMode const*) [107]
0.00 0.00 607/607 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[112] 0.0 0.00 0.00 607 lodepng_palette_add(LodePNGColorMode*, unsigned char, unsigned char, unsigned char, unsigned char) [112]
0.00 0.00 243/243 lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [43]
[113] 0.0 0.00 0.00 243 HuffmanTree_cleanup(HuffmanTree*) [113]
0.00 0.00 243/243 lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [43]
[114] 0.0 0.00 0.00 243 HuffmanTree_makeFromLengths2(HuffmanTree*) [114]
0.00 0.00 486/729 uivector_resizev(uivector*, unsigned long, unsigned int) [clone .constprop.64] [111]
0.00 0.00 120/120 Imager::Dodecahedron::AddFace(int, int, int, int, int, Imager::Optics const&, double) [128]
[115] 0.0 0.00 0.00 120 Imager::Dodecahedron::CheckEdge(int, int, double) const [115]
0.00 0.00 20/92 Imager::Icosahedron::Icosahedron(Imager::Vector, double, Imager::Optics const&) [174] 0.00 0.00 24/92 Imager::Dodecahedron::Dodecahedron(Imager::Vector, double, Imager::Optics const&) [163] 0.00 0.00 48/92 Imager::Dodecahedron::AddFace(int, int, int, int, int, Imager::Optics const&, double) [128]
[116] 0.0 0.00 0.00 92 Imager::TriangleMesh::AddTriangle(int, int, int, Imager::Optics const&) [116]
0.00 0.00 20/20 std::vector<Imager::TriangleMesh::Triangle, std::allocator<Imager::TriangleMesh::Triangle> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::TriangleMesh::Triangle*, std::vector<Imager::TriangleMesh::Triangle, std::allocator<Imager::TriangleMesh::Triangle> > >, Imager::TriangleMesh::Triangle const&) [131]
0.00 0.00 1/88 Imager::Cylinder::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [60] 0.00 0.00 2/88 Imager::Cylinder::AppendDiskIntersection(Imager::Vector const&, Imager::Vector const&, double, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [63] 0.00 0.00 2/88 Imager::ThinRing::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [51] 0.00 0.00 6/88 Imager::Spheroid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [50] 0.00 0.00 8/88 Imager::TriangleMesh::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [4] 0.00 0.00 9/88 Imager::Cuboid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [13] 0.00 0.00 13/88 Imager::Torus::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [37] 0.00 0.00 23/88 Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [15] 0.00 0.00 24/88 Imager::Sphere::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [14]
[117] 0.0 0.00 0.00 88 std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Intersection*, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > >, Imager::Intersection const&) [117]
0.00 0.00 48/48 lodepng_chunk_create(unsigned char**, unsigned long*, unsigned int, char const*, unsigned char const*) [121]
[118] 0.0 0.00 0.00 48 lodepng_chunk_generate_crc(unsigned char*) [118]
0.00 0.00 48/48 Crc32_update_crc(unsigned char const*, unsigned int, unsigned long) [clone .constprop.62] [119]
0.00 0.00 48/48 lodepng_chunk_generate_crc(unsigned char*) [118]
[119] 0.0 0.00 0.00 48 Crc32_update_crc(unsigned char const*, unsigned int, unsigned long) [clone .constprop.62] [119]
0.00 0.00 48/48 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[120] 0.0 0.00 0.00 48 addUnknownChunks(ucvector*, unsigned char*, unsigned long) [120]
0.00 0.00 45/45 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[121] 0.0 0.00 0.00 45 lodepng_chunk_create(unsigned char**, unsigned long*, unsigned int, char const*, unsigned char const*) [121]
0.00 0.00 48/48 lodepng_chunk_generate_crc(unsigned char*) [118]
0.00 0.00 15/45 lodepng_info_copy(LodePNGInfo*, LodePNGInfo const*) [136] 0.00 0.00 15/45 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31] 0.00 0.00 15/45 lodepng_encode_memory(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [32]
[122] 0.0 0.00 0.00 45 lodepng_info_cleanup(LodePNGInfo*) [122]
0.00 0.00 45/45 LodePNGText_cleanup(LodePNGInfo*) [123] 0.00 0.00 45/45 LodePNGIText_cleanup(LodePNGInfo*) [124]
0.00 0.00 45/45 lodepng_info_cleanup(LodePNGInfo*) [122]
[123] 0.0 0.00 0.00 45 LodePNGText_cleanup(LodePNGInfo*) [123]
0.00 0.00 45/45 lodepng_info_cleanup(LodePNGInfo*) [122]
[124] 0.0 0.00 0.00 45 LodePNGIText_cleanup(LodePNGInfo*) [124]
0.00 0.00 15/30 lodepng_state_init(LodePNGState*) [137] 0.00 0.00 15/30 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[125] 0.0 0.00 0.00 30 lodepng_info_init(LodePNGInfo*) [125]
0.00 0.00 30/30 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[126] 0.0 0.00 0.00 30 checkColorValidity(LodePNGColorType, unsigned int) [126]
0.00 0.00 1/29 SphereTest() [26] 0.00 0.00 1/29 CuboidTest() [22] 0.00 0.00 1/29 SetDifferenceTest() [21] 0.00 0.00 1/29 CylinderTest() [23] 0.00 0.00 1/29 SetIntersectionTest() [19] 0.00 0.00 1/29 SaturnTest() [18] 0.00 0.00 2/29 SpheroidTest() [24] 0.00 0.00 2/29 BitDonutTest() [20] 0.00 0.00 3/29 MultipleSphereTest() [25] 0.00 0.00 3/29 PolyhedraTest() [27] 0.00 0.00 3/29 DodecahedronOverlapTest() [28] 0.00 0.00 3/29 BlockTest() [17] 0.00 0.00 3/29 ChessBoardTest() [16] 0.00 0.00 4/29 TorusTest(char const*, double) [12]
[127] 0.0 0.00 0.00 29 std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [127]
0.00 0.00 24/24 Imager::Dodecahedron::Dodecahedron(Imager::Vector, double, Imager::Optics const&) [163]
[128] 0.0 0.00 0.00 24 Imager::Dodecahedron::AddFace(int, int, int, int, int, Imager::Optics const&, double) [128]
0.00 0.00 120/120 Imager::Dodecahedron::CheckEdge(int, int, double) const [115] 0.00 0.00 48/92 Imager::TriangleMesh::AddTriangle(int, int, int, Imager::Optics const&) [116]
0.00 0.00 4/22 Algebra::TestKnownQuadraticRoots(std::complex<double>, std::complex<double>, std::complex<double>) [96] 0.00 0.00 6/22 Algebra::TestKnownCubicRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) [95] 0.00 0.00 12/22 Algebra::TestKnownQuarticRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) [93]
[129] 0.0 0.00 0.00 22 Algebra::ValidatePolynomial(int, std::complex<double> const*, std::complex<double>) [129]
20 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86]
[130] 0.0 0.00 0.00 20 Imager::SolidObject_BinaryOperator::NestedRotateY(Imager::SolidObject&, double, double, double) <cycle 3> [130]
0.00 0.00 12/15 Imager::SolidObject_Reorientable::RotateY(double) [144] 0.00 0.00 3/5 Imager::Sphere::RotateY(double) [154] 3 Imager::SetComplement::RotateY(double) <cycle 3> [159] 2 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86]
0.00 0.00 20/20 Imager::TriangleMesh::AddTriangle(int, int, int, Imager::Optics const&) [116]
[131] 0.0 0.00 0.00 20 std::vector<Imager::TriangleMesh::Triangle, std::allocator<Imager::TriangleMesh::Triangle> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::TriangleMesh::Triangle*, std::vector<Imager::TriangleMesh::Triangle, std::allocator<Imager::TriangleMesh::Triangle> > >, Imager::TriangleMesh::Triangle const&) [131]
0.00 0.00 1/20 SphereTest() [26] 0.00 0.00 1/20 CuboidTest() [22] 0.00 0.00 1/20 SetDifferenceTest() [21] 0.00 0.00 1/20 CylinderTest() [23] 0.00 0.00 1/20 SpheroidTest() [24] 0.00 0.00 1/20 SetIntersectionTest() [19] 0.00 0.00 1/20 BitDonutTest() [20] 0.00 0.00 1/20 SaturnTest() [18] 0.00 0.00 1/20 DodecahedronOverlapTest() [28] 0.00 0.00 2/20 MultipleSphereTest() [25] 0.00 0.00 2/20 PolyhedraTest() [27] 0.00 0.00 2/20 BlockTest() [17] 0.00 0.00 2/20 TorusTest(char const*, double) [12] 0.00 0.00 3/20 ChessBoardTest() [16]
[132] 0.0 0.00 0.00 20 std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [132]
0.00 0.00 1/18 CuboidTest() [22] 0.00 0.00 1/18 CylinderTest() [23] 0.00 0.00 1/18 SpheroidTest() [24] 0.00 0.00 1/18 ChessBoardTest() [16] 0.00 0.00 2/18 TorusTest(char const*, double) [12] 0.00 0.00 12/18 Imager::SolidObject_BinaryOperator::NestedRotateX(Imager::SolidObject&, double, double, double) <cycle 2> [134]
[133] 0.0 0.00 0.00 18 Imager::SolidObject_Reorientable::RotateX(double) [133]
18 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88]
[134] 0.0 0.00 0.00 18 Imager::SolidObject_BinaryOperator::NestedRotateX(Imager::SolidObject&, double, double, double) <cycle 2> [134]
0.00 0.00 12/18 Imager::SolidObject_Reorientable::RotateX(double) [133] 0.00 0.00 2/3 Imager::Sphere::RotateX(double) [161] 2 Imager::SetComplement::RotateX(double) <cycle 2> [165] 2 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88]
0.00 0.00 5/17 Imager::Icosahedron::Icosahedron(Imager::Vector, double, Imager::Optics const&) [174] 0.00 0.00 12/17 Imager::Dodecahedron::Dodecahedron(Imager::Vector, double, Imager::Optics const&) [163]
[135] 0.0 0.00 0.00 17 std::vector<Imager::Vector, std::allocator<Imager::Vector> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Vector*, std::vector<Imager::Vector, std::allocator<Imager::Vector> > >, Imager::Vector const&) [135]
0.00 0.00 15/15 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[136] 0.0 0.00 0.00 15 lodepng_info_copy(LodePNGInfo*, LodePNGInfo const*) [136]
0.00 0.00 15/45 lodepng_info_cleanup(LodePNGInfo*) [122] 0.00 0.00 15/15 lodepng_color_mode_copy(LodePNGColorMode*, LodePNGColorMode const*) [140]
0.00 0.00 15/15 lodepng_encode_memory(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [32]
[137] 0.0 0.00 0.00 15 lodepng_state_init(LodePNGState*) [137]
0.00 0.00 15/30 lodepng_info_init(LodePNGInfo*) [125]
0.00 0.00 15/15 lodepng_encode_memory(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [32]
[138] 0.0 0.00 0.00 15 lodepng_state_cleanup(LodePNGState*) [138]
0.00 0.00 15/15 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[139] 0.0 0.00 0.00 15 lodepng_can_have_alpha(LodePNGColorMode const*) [139]
0.00 0.00 15/15 lodepng_info_copy(LodePNGInfo*, LodePNGInfo const*) [136]
[140] 0.0 0.00 0.00 15 lodepng_color_mode_copy(LodePNGColorMode*, LodePNGColorMode const*) [140]
0.00 0.00 15/15 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[141] 0.0 0.00 0.00 15 zlib_compress(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [141]
0.00 0.00 15/15 lodepng_zlib_compress(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [38]
[142] 0.0 0.00 0.00 15 update_adler32(unsigned int, unsigned char const*, unsigned int) [clone .constprop.61] [142]
0.00 0.00 15/15 lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [31]
[143] 0.0 0.00 0.00 15 preProcessScanlines(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGInfo const*, LodePNGEncoderSettings const*) [143]
0.00 0.00 1/15 CuboidTest() [22] 0.00 0.00 1/15 CylinderTest() [23] 0.00 0.00 1/15 SpheroidTest() [24] 0.00 0.00 12/15 Imager::SolidObject_BinaryOperator::NestedRotateY(Imager::SolidObject&, double, double, double) <cycle 3> [130]
[144] 0.0 0.00 0.00 15 Imager::SolidObject_Reorientable::RotateY(double) [144]
0.00 0.00 15/15 Imager::Scene::~Scene() [146]
[145] 0.0 0.00 0.00 15 Imager::Scene::ClearSolidObjectList() [145]
0.00 0.00 7/13 Imager::Sphere::~Sphere() [150] 0.00 0.00 2/2 Imager::SetIntersection::~SetIntersection() [167] 0.00 0.00 2/2 Imager::SetDifference::~SetDifference() [166] 0.00 0.00 2/4 Imager::SetUnion::~SetUnion() [156] 0.00 0.00 1/4 Imager::Cuboid::~Cuboid() [155] 0.00 0.00 1/1 Imager::Spheroid::~Spheroid() [180] 0.00 0.00 1/1 Imager::Cylinder::~Cylinder() [179] 0.00 0.00 1/1 Imager::ConcreteBlock::~ConcreteBlock() [176] 0.00 0.00 1/1 Imager::Saturn::~Saturn() [178] 0.00 0.00 1/2 Imager::Dodecahedron::~Dodecahedron() [164] 0.00 0.00 1/1 Imager::Icosahedron::~Icosahedron() [175] 0.00 0.00 1/1 Imager::ChessBoard::~ChessBoard() [173]
0.00 0.00 1/15 SphereTest() [26] 0.00 0.00 1/15 CuboidTest() [22] 0.00 0.00 1/15 SetDifferenceTest() [21] 0.00 0.00 1/15 CylinderTest() [23] 0.00 0.00 1/15 SpheroidTest() [24] 0.00 0.00 1/15 SetIntersectionTest() [19] 0.00 0.00 1/15 MultipleSphereTest() [25] 0.00 0.00 1/15 PolyhedraTest() [27] 0.00 0.00 1/15 BitDonutTest() [20] 0.00 0.00 1/15 SaturnTest() [18] 0.00 0.00 1/15 DodecahedronOverlapTest() [28] 0.00 0.00 1/15 BlockTest() [17] 0.00 0.00 1/15 ChessBoardTest() [16] 0.00 0.00 2/15 TorusTest(char const*, double) [12]
[146] 0.0 0.00 0.00 15 Imager::Scene::~Scene() [146]
0.00 0.00 15/15 Imager::Scene::ClearSolidObjectList() [145]
0.00 0.00 15/15 Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [1]
[147] 0.0 0.00 0.00 15 lodepng::encode(std::string const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, unsigned int, unsigned int, LodePNGColorType, unsigned int) [147]
0.00 0.00 15/15 lodepng::encode(std::string const&, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [33]
[148] 0.0 0.00 0.00 15 lodepng::save_file(std::vector<unsigned char, std::allocator<unsigned char> > const&, std::string const&) [148]
0.00 0.00 15/15 lodepng::encode(std::vector<unsigned char, std::allocator<unsigned char> >&, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [34]
[149] 0.0 0.00 0.00 15 void std::vector<unsigned char, std::allocator<unsigned char> >::_M_range_insert<unsigned char*>(__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >, unsigned char*, unsigned char*, std::forward_iterator_tag) [149]
0.00 0.00 1/13 Imager::SetDifference::~SetDifference() [166] 0.00 0.00 2/13 Imager::SetComplement::~SetComplement() [160] 0.00 0.00 3/13 Imager::SetIntersection::~SetIntersection() [167] 0.00 0.00 7/13 Imager::Scene::ClearSolidObjectList() [145]
[150] 0.0 0.00 0.00 13 Imager::Sphere::~Sphere() [150]
0.00 0.00 2/7 Algebra::TestKnownQuadraticRoots(std::complex<double>, std::complex<double>, std::complex<double>) [96] 0.00 0.00 2/7 Algebra::TestKnownCubicRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) [95] 0.00 0.00 3/7 Algebra::TestKnownQuarticRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) [93]
[151] 0.0 0.00 0.00 7 Algebra::CheckRoots(int, std::complex<double> const*, std::complex<double> const*) [151]
0.00 0.00 1/6 BlockTest() [17] 0.00 0.00 2/6 MultipleSphereTest() [25] 0.00 0.00 3/6 ChessBoardTest() [16]
[152] 0.0 0.00 0.00 6 Imager::Optics::SetOpacity(double) [152]
0.00 0.00 1/5 Imager::SetDifference::~SetDifference() [166] 0.00 0.00 4/5 Imager::SetUnion::~SetUnion() [156]
[153] 0.0 0.00 0.00 5 Imager::Torus::~Torus() [153]
0.00 0.00 2/5 Imager::SetComplement::RotateY(double) <cycle 3> [159] 0.00 0.00 3/5 Imager::SolidObject_BinaryOperator::NestedRotateY(Imager::SolidObject&, double, double, double) <cycle 3> [130]
[154] 0.0 0.00 0.00 5 Imager::Sphere::RotateY(double) [154]
0.00 0.00 1/4 Imager::ConcreteBlock::~ConcreteBlock() [176] 0.00 0.00 1/4 Imager::Scene::ClearSolidObjectList() [145] 0.00 0.00 2/4 Imager::SetUnion::~SetUnion() [156]
[155] 0.0 0.00 0.00 4 Imager::Cuboid::~Cuboid() [155]
1 Imager::SetUnion::~SetUnion() [156] 0.00 0.00 1/4 Imager::Saturn::~Saturn() [178] 0.00 0.00 1/4 Imager::SetComplement::~SetComplement() [160] 0.00 0.00 2/4 Imager::Scene::ClearSolidObjectList() [145]
[156] 0.0 0.00 0.00 4+1 Imager::SetUnion::~SetUnion() [156]
0.00 0.00 4/5 Imager::Torus::~Torus() [153] 0.00 0.00 3/3 Imager::ThinRing::~ThinRing() [162] 0.00 0.00 2/4 Imager::Cuboid::~Cuboid() [155] 1 Imager::SetUnion::~SetUnion() [156]
0.00 0.00 1/3 DodecahedronOverlapTest() [28] 0.00 0.00 2/3 PolyhedraTest() [27]
[157] 0.0 0.00 0.00 3 Imager::TriangleMesh::RotateX(double) [157]
0.00 0.00 1/3 DodecahedronOverlapTest() [28] 0.00 0.00 2/3 PolyhedraTest() [27]
[158] 0.0 0.00 0.00 3 Imager::TriangleMesh::RotateY(double) [158]
3 Imager::SolidObject_BinaryOperator::NestedRotateY(Imager::SolidObject&, double, double, double) <cycle 3> [130]
[159] 0.0 0.00 0.00 3 Imager::SetComplement::RotateY(double) <cycle 3> [159]
0.00 0.00 2/5 Imager::Sphere::RotateY(double) [154] 1 Imager::SolidObject_BinaryOperator::RotateY(double) <cycle 3> [86]
0.00 0.00 1/3 Imager::ConcreteBlock::~ConcreteBlock() [176] 0.00 0.00 2/3 Imager::SetDifference::~SetDifference() [166]
[160] 0.0 0.00 0.00 3 Imager::SetComplement::~SetComplement() [160]
0.00 0.00 2/13 Imager::Sphere::~Sphere() [150] 0.00 0.00 1/4 Imager::SetUnion::~SetUnion() [156]
0.00 0.00 1/3 Imager::SetComplement::RotateX(double) <cycle 2> [165] 0.00 0.00 2/3 Imager::SolidObject_BinaryOperator::NestedRotateX(Imager::SolidObject&, double, double, double) <cycle 2> [134]
[161] 0.0 0.00 0.00 3 Imager::Sphere::RotateX(double) [161]
0.00 0.00 3/3 Imager::SetUnion::~SetUnion() [156]
[162] 0.0 0.00 0.00 3 Imager::ThinRing::~ThinRing() [162]
0.00 0.00 1/2 PolyhedraTest() [27] 0.00 0.00 1/2 DodecahedronOverlapTest() [28]
[163] 0.0 0.00 0.00 2 Imager::Dodecahedron::Dodecahedron(Imager::Vector, double, Imager::Optics const&) [163]
0.00 0.00 24/92 Imager::TriangleMesh::AddTriangle(int, int, int, Imager::Optics const&) [116] 0.00 0.00 24/24 Imager::Dodecahedron::AddFace(int, int, int, int, int, Imager::Optics const&, double) [128] 0.00 0.00 12/17 std::vector<Imager::Vector, std::allocator<Imager::Vector> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Vector*, std::vector<Imager::Vector, std::allocator<Imager::Vector> > >, Imager::Vector const&) [135]
0.00 0.00 1/2 Imager::Scene::ClearSolidObjectList() [145] 0.00 0.00 1/2 Imager::SetIntersection::~SetIntersection() [167]
[164] 0.0 0.00 0.00 2 Imager::Dodecahedron::~Dodecahedron() [164]
2 Imager::SolidObject_BinaryOperator::NestedRotateX(Imager::SolidObject&, double, double, double) <cycle 2> [134]
[165] 0.0 0.00 0.00 2 Imager::SetComplement::RotateX(double) <cycle 2> [165]
0.00 0.00 1/3 Imager::Sphere::RotateX(double) [161] 1 Imager::SolidObject_BinaryOperator::RotateX(double) <cycle 2> [88]
0.00 0.00 2/2 Imager::Scene::ClearSolidObjectList() [145]
[166] 0.0 0.00 0.00 2 Imager::SetDifference::~SetDifference() [166]
0.00 0.00 2/3 Imager::SetComplement::~SetComplement() [160] 0.00 0.00 1/13 Imager::Sphere::~Sphere() [150] 0.00 0.00 1/5 Imager::Torus::~Torus() [153]
0.00 0.00 2/2 Imager::Scene::ClearSolidObjectList() [145]
[167] 0.0 0.00 0.00 2 Imager::SetIntersection::~SetIntersection() [167]
0.00 0.00 3/13 Imager::Sphere::~Sphere() [150] 0.00 0.00 1/2 Imager::Dodecahedron::~Dodecahedron() [164]
0.00 0.00 1/1 __libc_csu_init [325]
[168] 0.0 0.00 0.00 1 _GLOBAL__sub_I__Z9BlockTestv [168]
0.00 0.00 1/1 __libc_csu_init [325]
[169] 0.0 0.00 0.00 1 _GLOBAL__sub_I__ZN6Imager5Scene20ClearSolidObjectListEv [169]
0.00 0.00 1/1 __libc_csu_init [325]
[170] 0.0 0.00 0.00 1 _GLOBAL__sub_I__ZN6Imager6IndentERSoi [170]
0.00 0.00 1/1 __libc_csu_init [325]
[171] 0.0 0.00 0.00 1 _GLOBAL__sub_I__ZN7Algebra20SolveLinearEquationsEddddddddddddRdS0_S0_ [171]
0.00 0.00 1/1 ChessBoardTest() [16]
[172] 0.0 0.00 0.00 1 Imager::ChessBoard::ChessBoard(double, double, double, double, Imager::Color const&, Imager::Color const&, Imager::Color const&) [172]
0.00 0.00 1/1 Imager::Scene::ClearSolidObjectList() [145]
[173] 0.0 0.00 0.00 1 Imager::ChessBoard::~ChessBoard() [173]
0.00 0.00 1/1 PolyhedraTest() [27]
[174] 0.0 0.00 0.00 1 Imager::Icosahedron::Icosahedron(Imager::Vector, double, Imager::Optics const&) [174]
0.00 0.00 20/92 Imager::TriangleMesh::AddTriangle(int, int, int, Imager::Optics const&) [116] 0.00 0.00 5/17 std::vector<Imager::Vector, std::allocator<Imager::Vector> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Vector*, std::vector<Imager::Vector, std::allocator<Imager::Vector> > >, Imager::Vector const&) [135]
0.00 0.00 1/1 Imager::Scene::ClearSolidObjectList() [145]
[175] 0.0 0.00 0.00 1 Imager::Icosahedron::~Icosahedron() [175]
0.00 0.00 1/1 Imager::Scene::ClearSolidObjectList() [145]
[176] 0.0 0.00 0.00 1 Imager::ConcreteBlock::~ConcreteBlock() [176]
0.00 0.00 1/4 Imager::Cuboid::~Cuboid() [155] 0.00 0.00 1/3 Imager::SetComplement::~SetComplement() [160]
0.00 0.00 1/1 Imager::Saturn::~Saturn() [178]
[177] 0.0 0.00 0.00 1 Imager::Planet::~Planet() [177]
0.00 0.00 1/1 Imager::Scene::ClearSolidObjectList() [145]
[178] 0.0 0.00 0.00 1 Imager::Saturn::~Saturn() [178]
0.00 0.00 1/1 Imager::Planet::~Planet() [177] 0.00 0.00 1/4 Imager::SetUnion::~SetUnion() [156]
0.00 0.00 1/1 Imager::Scene::ClearSolidObjectList() [145]
[179] 0.0 0.00 0.00 1 Imager::Cylinder::~Cylinder() [179]
0.00 0.00 1/1 Imager::Scene::ClearSolidObjectList() [145]
[180] 0.0 0.00 0.00 1 Imager::Spheroid::~Spheroid() [180]
� Index by function name
[168] _GLOBAL__sub_I__Z9BlockTestv (main.cpp) [80] HuffmanTree_makeFromFrequencies(HuffmanTree*, unsigned int const*, unsigned long, unsigned int) (lodepng.cpp) [91] Algebra::UnitTest() [169] _GLOBAL__sub_I__ZN6Imager5Scene20ClearSolidObjectListEv (scene.cpp) [172] Imager::ChessBoard::ChessBoard(double, double, double, double, Imager::Color const&, Imager::Color const&, Imager::Color const&) [33] lodepng::encode(std::string const&, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [170] _GLOBAL__sub_I__ZN6Imager6IndentERSoi (debug.cpp) [173] Imager::ChessBoard::~ChessBoard() [147] lodepng::encode(std::string const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, unsigned int, unsigned int, LodePNGColorType, unsigned int) [171] _GLOBAL__sub_I__ZN7Algebra20SolveLinearEquationsEddddddddddddRdS0_S0_ (algebra.cpp) [174] Imager::Icosahedron::Icosahedron(Imager::Vector, double, Imager::Optics const&) [34] lodepng::encode(std::vector<unsigned char, std::allocator<unsigned char> >&, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [22] CuboidTest() [175] Imager::Icosahedron::~Icosahedron() [148] lodepng::save_file(std::vector<unsigned char, std::allocator<unsigned char> > const&, std::string const&) [18] SaturnTest() [81] Imager::SolidObject::Translate(double, double, double) [106] Imager::ChessBoard::SquareCoordinate(double) const [20] BitDonutTest() [128] Imager::Dodecahedron::AddFace(int, int, int, int, int, Imager::Optics const&, double) [65] Imager::ChessBoard::ObjectSpace_SurfaceOptics(Imager::Vector const&, void const*) const [23] CylinderTest() [163] Imager::Dodecahedron::Dodecahedron(Imager::Vector, double, Imager::Optics const&) [66] Imager::SolidObject::SurfaceOptics(Imager::Vector const&, void const*) const [24] SpheroidTest() [164] Imager::Dodecahedron::~Dodecahedron() [48] Imager::SolidObject::Contains(Imager::Vector const&) const [27] PolyhedraTest() [116] Imager::TriangleMesh::AddTriangle(int, int, int, Imager::Optics const&) [115] Imager::Dodecahedron::CheckEdge(int, int, double) const [16] ChessBoardTest() [157] Imager::TriangleMesh::RotateX(double) [70] Imager::TriangleMesh::NormalVector(Imager::TriangleMesh::Triangle const&) const [31] lodepng_encode(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGState*) [158] Imager::TriangleMesh::RotateY(double) [105] Imager::TriangleMesh::SurfaceOptics(Imager::Vector const&, void const*) const [67] lodepng_convert(unsigned char*, unsigned char const*, LodePNGColorMode*, LodePNGColorMode*, unsigned int, unsigned int) [176] Imager::ConcreteBlock::~ConcreteBlock() [4] Imager::TriangleMesh::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [43] lodepng_deflate(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [165] Imager::SetComplement::RotateX(double) [35] Imager::SetComplement::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [21] SetDifferenceTest() [159] Imager::SetComplement::RotateY(double) [57] Imager::SetComplement::Contains(Imager::Vector const&) const [136] lodepng_info_copy(LodePNGInfo*, LodePNGInfo const*) [89] Imager::SetComplement::Translate(double, double, double) [30] Imager::SetIntersection::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [125] lodepng_info_init(LodePNGInfo*) [160] Imager::SetComplement::~SetComplement() [15] Imager::SetIntersection::AppendOverlappingIntersections(Imager::Vector const&, Imager::Vector const&, Imager::SolidObject const&, Imager::SolidObject const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [25] MultipleSphereTest() [166] Imager::SetDifference::~SetDifference() [53] Imager::SolidObject_Reorientable::SurfaceOptics(Imager::Vector const&, void const*) const [137] lodepng_state_init(LodePNGState*) [167] Imager::SetIntersection::~SetIntersection() [11] Imager::SolidObject_Reorientable::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [19] SetIntersectionTest() [47] Imager::PickClosestIntersection(std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > const&, Imager::Intersection&) [75] Imager::SolidObject_Reorientable::ObjectSpace_SurfaceOptics(Imager::Vector const&, void const*) const [112] lodepng_palette_add(LodePNGColorMode*, unsigned char, unsigned char, unsigned char, unsigned char) [133] Imager::SolidObject_Reorientable::RotateX(double) [52] Imager::SolidObject_Reorientable::Contains(Imager::Vector const&) const [121] lodepng_chunk_create(unsigned char**, unsigned long*, unsigned int, char const*, unsigned char const*) [144] Imager::SolidObject_Reorientable::RotateY(double) [6] Imager::Scene::CalculateMatte(Imager::Intersection const&) const [122] lodepng_info_cleanup(LodePNGInfo*) [69] Imager::SolidObject_Reorientable::RotateZ(double) [5] Imager::Scene::CalculateLighting(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const [32] lodepng_encode_memory(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGColorType, unsigned int) [134] Imager::SolidObject_BinaryOperator::NestedRotateX(Imager::SolidObject&, double, double, double) [58] Imager::Scene::CalculateReflection(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const [138] lodepng_state_cleanup(LodePNGState*) [130] Imager::SolidObject_BinaryOperator::NestedRotateY(Imager::SolidObject&, double, double, double) [40] Imager::Scene::CalculateRefraction(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int, double&) const [38] lodepng_zlib_compress(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) [88] Imager::SolidObject_BinaryOperator::RotateX(double) [7] Imager::Scene::HasClearLineOfSight(Imager::Vector const&, Imager::Vector const&) const [139] lodepng_can_have_alpha(LodePNGColorMode const*) [86] Imager::SolidObject_BinaryOperator::RotateY(double) [54] Imager::Scene::PolarizedReflection(double, double, double, double) const [28] DodecahedronOverlapTest() [82] Imager::SolidObject_BinaryOperator::RotateZ(double) [10] Imager::Scene::FindClosestIntersection(Imager::Vector const&, Imager::Vector const&, Imager::Intersection&) const [140] lodepng_color_mode_copy(LodePNGColorMode*, LodePNGColorMode const*) [84] Imager::SolidObject_BinaryOperator::Translate(double, double, double) [9] Imager::Scene::TraceRay(Imager::Vector const&, Imager::Vector const&, double, Imager::Color, int) const [118] lodepng_chunk_generate_crc(unsigned char*) [145] Imager::Scene::ClearSolidObjectList() [1] Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const [79] lodepng_huffman_code_lengths(unsigned int*, unsigned int const*, unsigned long, unsigned int) [146] Imager::Scene::~Scene() [49] Imager::Torus::SurfaceNormal(Imager::Vector const&) const [17] BlockTest() [153] Imager::Torus::~Torus() [41] Imager::Torus::SolveIntersections(Imager::Vector const&, Imager::Vector const&, double*) const [12] TorusTest(char const*, double) [155] Imager::Cuboid::~Cuboid() [77] Imager::Torus::ObjectSpace_Contains(Imager::Vector const&) const [36] encodeLZ77(uivector*, Hash*, unsigned char const*, unsigned long, unsigned long, unsigned int) (lodepng.cpp) [152] Imager::Optics::SetOpacity(double) [37] Imager::Torus::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [78] sort_coins(Coin*, unsigned long) (lodepng.cpp) [97] Imager::Optics::SetGlossColor(Imager::Color const&) [42] Imager::Cuboid::ObjectSpace_Contains(Imager::Vector const&) const [64] string_set(char**, char const*) (lodepng.cpp) [72] Imager::Optics::SetMatteColor(Imager::Color const&) [13] Imager::Cuboid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [109] cleanup_coins(Coin*, unsigned long) (lodepng.cpp) [90] Imager::Optics::SetMatteGlossBalance(double, Imager::Color const&, Imager::Color const&) [71] Imager::Optics::ValidateReflectionColor(Imager::Color const&) const [141] zlib_compress(unsigned char**, unsigned long*, unsigned char const*, unsigned long, LodePNGCompressSettings const*) (lodepng.cpp) [177] Imager::Planet::~Planet() [14] Imager::Sphere::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [46] addBitToStream(unsigned long*, ucvector*, unsigned char) (lodepng.cpp) [92] Imager::Saturn::CreateRingSystem() [55] Imager::Sphere::Contains(Imager::Vector const&) const [76] color_tree_has(ColorTree*, unsigned char, unsigned char, unsigned char, unsigned char) (lodepng.cpp) [178] Imager::Saturn::~Saturn() [63] Imager::Cylinder::AppendDiskIntersection(Imager::Vector const&, Imager::Vector const&, double, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [142] update_adler32(unsigned int, unsigned char const*, unsigned int) [clone .constprop.61] (lodepng.cpp) [161] Imager::Sphere::RotateX(double) [60] Imager::Cylinder::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [108] searchCodeIndex(unsigned int const*, unsigned long, unsigned long) (lodepng.cpp) [154] Imager::Sphere::RotateY(double) [29] Imager::SetUnion::AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [119] Crc32_update_crc(unsigned char const*, unsigned int, unsigned long) [clone .constprop.62] (lodepng.cpp) [150] Imager::Sphere::~Sphere() [68] Imager::SetUnion::Contains(Imager::Vector const&) const [120] addUnknownChunks(ucvector*, unsigned char*, unsigned long) (lodepng.cpp) [179] Imager::Cylinder::~Cylinder() [50] Imager::Spheroid::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [111] uivector_resizev(uivector*, unsigned long, unsigned int) [clone .constprop.64] (lodepng.cpp) [156] Imager::SetUnion::~SetUnion() [51] Imager::ThinRing::ObjectSpace_AppendAllIntersections(Imager::Vector const&, Imager::Vector const&, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >&) const [126] checkColorValidity(LodePNGColorType, unsigned int) (lodepng.cpp) [180] Imager::Spheroid::~Spheroid() [127] std::vector<Imager::LightSource, std::allocator<Imager::LightSource> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::LightSource*, std::vector<Imager::LightSource, std::allocator<Imager::LightSource> > >, Imager::LightSource const&) [74] getPixelColorRGBA8(unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char const*, unsigned long, LodePNGColorMode const*) (lodepng.cpp) [162] Imager::ThinRing::~ThinRing() [117] std::vector<Imager::Intersection, std::allocator<Imager::Intersection> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Intersection*, std::vector<Imager::Intersection, std::allocator<Imager::Intersection> > >, Imager::Intersection const&) [39] ucvector_push_back(ucvector*, unsigned char) (lodepng.cpp) [151] Algebra::CheckRoots(int, std::complex<double> const*, std::complex<double> const*) [131] std::vector<Imager::TriangleMesh::Triangle, std::allocator<Imager::TriangleMesh::Triangle> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::TriangleMesh::Triangle*, std::vector<Imager::TriangleMesh::Triangle, std::allocator<Imager::TriangleMesh::Triangle> > >, Imager::TriangleMesh::Triangle const&) [104] uivector_push_back(uivector*, unsigned int) (lodepng.cpp) [59] Algebra::FilterRealNumbers(int, std::complex<double> const*, double*) [135] std::vector<Imager::Vector, std::allocator<Imager::Vector> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::Vector*, std::vector<Imager::Vector, std::allocator<Imager::Vector> > >, Imager::Vector const&) [113] HuffmanTree_cleanup(HuffmanTree*) (lodepng.cpp) [94] Algebra::SolveCubicEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [132] std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<Imager::SolidObject**, std::vector<Imager::SolidObject*, std::allocator<Imager::SolidObject*> > >, Imager::SolidObject* const&) [123] LodePNGText_cleanup(LodePNGInfo*) (lodepng.cpp) [129] Algebra::ValidatePolynomial(int, std::complex<double> const*, std::complex<double>) [149] void std::vector<unsigned char, std::allocator<unsigned char> >::_M_range_insert<unsigned char*>(__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >, unsigned char*, unsigned char*, std::forward_iterator_tag) [110] append_symbol_coins(Coin*, unsigned int const*, unsigned int, unsigned long) (lodepng.cpp) [95] Algebra::TestKnownCubicRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) [61] frame_dummy [73] lodepng_add32bitInt(ucvector*, unsigned int) (lodepng.cpp) [8] Algebra::SolveLinearEquations(double, double, double, double, double, double, double, double, double, double, double, double, double&, double&, double&) [83] <cycle 1> [143] preProcessScanlines(unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int, LodePNGInfo const*, LodePNGEncoderSettings const*) (lodepng.cpp) [44] Algebra::SolveQuarticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [87] <cycle 2> [124] LodePNGIText_cleanup(LodePNGInfo*) (lodepng.cpp) [93] Algebra::TestKnownQuarticRoots(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>) [85] <cycle 3> [45] addBitsToStreamReversed(unsigned long*, ucvector*, unsigned int, unsigned long) (lodepng.cpp) [56] Algebra::SolveQuadraticEquation(std::complex<double>, std::complex<double>, std::complex<double>, std::complex<double>*) [2] <cycle 4> [107] lodepng_color_mode_equal(LodePNGColorMode const*, LodePNGColorMode const*) (lodepng.cpp) [96] Algebra::TestKnownQuadraticRoots(std::complex<double>, std::complex<double>, std::complex<double>) [114] HuffmanTree_makeFromLengths2(HuffmanTree*) (lodepng.cpp) [62] Algebra::cbrt(std::complex<double>, int)
Most of the time (99.3%) is spent executing the SaveImage function (Imager::Scene::SaveImage(char const*, unsigned long, unsigned long, double, unsigned long) const). In the additional lodepng code that runs alongside the ray tracer, 94.4% of time is spent in the CalculateLighting function (Imager::Scene::CalculateLighting(Imager::Intersection const&, Imager::Vector const&, double, Imager::Color, int) const).
Assignment 2
During assignment 2, we tried a simple kernel that took the shape of a dot product, what this achieved was nothing special, actually as predicted at the end of assignment 1, continuously calling cudaMalloc and cudaMemCpy had severe consequences on time.
Initial implementation
vector <float> ddot(const vector <float>& m1, const vector <float>& m2, const int m1_rows, const int m1_columns, const int m2_columns) { cudaError_t Error = cudaSuccess; vector<float> product;
float* h_p = new float[m1.size()]; float* h_m1 = new float[m1_rows * m1_columns]; for (int i = 0; i < m1.size; i++) { h_m1[i] = m1[i]; }
float* h_m2 = new float[m1_rows * m2_columns]; for (int i = 0; i != m2.size; i++) { h_m2[i] = m2[i]; }
//declare device variables float* d_m1; float* d_m2; float* d_p; Error = cudaMalloc((void**)&d_m1, m1_rows * m1_columns * sizeof(float));
if (Error != cudaSuccess) { cerr << "Failed @ d_m1 " << cudaGetErrorName(Error) << "!"; exit(EXIT_FAILURE); } Error = cudaMalloc((void**)&d_m2, m1_rows * m2_columns * sizeof(float)); if (Error != cudaSuccess) { cerr << "Failed @ d_m2 " << cudaGetErrorName(Error) << "!"; exit(EXIT_FAILURE); } Error = cudaMalloc((void**)&d_p, m1_rows * m1_columns * sizeof(float)); if (Error != cudaSuccess) { cerr << "Failed @ d_p " << cudaGetErrorName(Error) << "!"; exit(EXIT_FAILURE); } Error = cudaMemcpy(d_m1, h_m1, m1_rows * m1_columns * sizeof(float), cudaMemcpyHostToDevice); if (Error != cudaSuccess) { cerr << "Failed @ Memcpy d_m1 " << cudaGetErrorName(Error) << "!"; exit(EXIT_FAILURE); } Error = cudaMemcpy(d_m2, h_m2, m1_rows * m2_columns * sizeof(float), cudaMemcpyHostToDevice); if (Error != cudaSuccess) { cerr << "Failed @ Memcpy d_m2 " << cudaGetErrorName(Error) << "!"; exit(EXIT_FAILURE); }
//set blocks and call kernel int width = m1_rows; int height = m1_columns; dim3 dBlock(32, 32); dim3 dGrid((width + dBlock.x - 1) / dBlock.x, (height + dBlock.y - 1) / dBlock.y);
kdot << < dGrid, dBlock >> > (d_m1, d_m2, d_p, m1_rows, m1_columns, m2_columns); if (Error != cudaSuccess) { cerr << "Failed @ kdot function call " << cudaGetErrorName(Error) << "!"; exit(EXIT_FAILURE); } //copy device matrix to host matrix Error = cudaMemcpy(h_p, d_p, m1_rows * m1_columns * sizeof(float), cudaMemcpyDeviceToHost); if (Error != cudaSuccess) { cerr << "Failed @ cudaMemcpy from d_p to h_p " << cudaGetErrorName(Error) << "!"; exit(EXIT_FAILURE); }
//freeCuda & delete //display("C = A B :", h_p, m1_rows, m1_columns); Error = cudaFree(d_m1); cudaCheck(Error); Error = cudaFree(d_m2); cudaCheck(Error); Error = cudaFree(d_p); cudaCheck(Error);
delete[] h_m1;
delete[] h_m2; cudaDeviceReset(); //h_p to vector
for (int i = 0; i < (m1_rows * m1_columns); i++) { product.push_back(h_p[i]);
} delete[] h_p; return product; }