manuel.gysin Posted October 30, 2011 Share Posted October 30, 2011 Hello While searching a bottleneck with fps I got this output from engine_analyze: total self total self seconds seconds calls ms/call ms/call name 106.395 104.579 8406 12.6570 12.4410 World::update_multiple() 5.425 3.744 8406 0.6454 0.4454 RenderRenderer::render_world(const char*,int) 2.179 2.177 84060 0.0259 0.0259 ObjectGrass::render(int,ObjectSurface*) 1.045 1.045 42030 0.0249 0.0249 ObjectGrass::flush(float) 1.151 0.973 84060 0.0137 0.0116 ObjectTerrain::render(int,ObjectSurface*) 0.974 0.970 8406 0.1158 0.1154 WorldSpatial::update() 0.849 0.833 7222 0.1175 0.1153 WorldSpatial::flush() 107.758 0.389 8406 12.8192 0.0463 World::update() 0.373 0.373 16812 0.0222 0.0222 ObjectTerrain::flush(float) 0.278 0.277 151308 0.0018 0.0018 RenderState::setMaterial(int,Material*) 1.665 0.264 16812 0.0991 0.0157 RenderRenderer::render_deferred_surfaces(Vector<ObjectSurface*>&,int) 0.221 0.209 8406 0.0263 0.0249 ObjectSky::flush(float) 0.176 0.176 8406 0.0210 0.0210 ObjectWater::flush(float) 1.472 0.169 8406 0.1751 0.0201 RenderLights::renderDeferredLights(RenderScene*,RenderDeferred*,const Vector<Node*>&,int) 0.183 0.145 8406 0.0217 0.0172 RenderPost::renderComposite(Texture*,RenderDeferred*,Texture*,Texture*,Texture*,Texture*,Texture*,Texture*,Texture*,Texture*) 0.608 0.140 420300 0.0014 0.0003 RenderRenderer::setObjectSurface(int,int,ObjectSurface*,Shader*,Material*) 0.978 0.117 7222 0.1355 0.0162 World::flush() 0.129 0.113 8406 0.0153 0.0134 RenderLights::get_light_world_shadow_surfaces(LightWorld*,const Vector<Node*>&) 1.073 0.106 8406 0.1276 0.0127 RenderLights::render_shadow_world(LightWorld*,Vector<ObjectSurface*>*) 0.103 0.102 7222 0.0143 0.0142 WorldSpatial::getCollision(const WorldBoundSphere&,Vector<Object*>&) 0.092 0.092 428706 0.0002 0.0002 RenderRenderer::setShaderMaterialParameters(int) 0.163 0.057 7222 0.0226 0.0078 PhysicsScene::getIntersection(const BoundSphere&) 0.047 0.047 8406 0.0056 0.0056 RenderLights::set_light_world_parameters(LightWorld*) 0.043 0.043 361458 0.0001 0.0001 RenderRenderer::setShaderParameters() 1.303 0.041 8406 0.1550 0.0048 RenderLights::render_deferred_light_world(LightWorld*,Material*,RenderDeferred*,const Vector<Node*>&,int) 0.035 0.035 58842 0.0006 0.0006 SortSurfaceShader(Vector<ObjectSurface*>&,int) 0.032 0.032 67248 0.0005 0.0005 MakeSurfaceChain(Vector<ObjectSurface*>&,int) 1.318 0.031 16812 0.0784 0.0018 RenderRenderer::render_ambient_surfaces(Vector<ObjectSurface*>&) 0.035 0.030 8406 0.0041 0.0035 RenderRenderer::render_deferred_queries(RenderScene*) 0.029 0.029 243774 0.0001 0.0001 RenderLights::setShaderLightParameters(int) 0.037 0.027 8406 0.0044 0.0032 RenderPost::renderPostMaterial2D(Material*,const RenderPostTexture*) 1.498 0.026 8406 0.1782 0.0030 RenderRenderer::render_deferred_light(RenderScene*,RenderDeferred*,int) 0.183 0.022 33624 0.0055 0.0007 RenderRenderer::render_transparent(RenderScene*,RenderDeferred*,int,int) 0.026 0.021 8406 0.0031 0.0025 WorldSpatial::update_intersection(const WorldBoundFrustum&,Vector<Node*>&) 0.070 0.019 8406 0.0084 0.0023 WorldSpatial::getIntersection(const BoundFrustum&,const Mat4&,Vector<Node*>&) 0.966 0.019 33624 0.0287 0.0006 RenderLights::render_shadow_opacity_surfaces(Light*,Vector<ObjectSurface*>&) 0.019 0.018 50436 0.0004 0.0004 UpdateSurfaces(Vector<ObjectSurface*>&,const Vec3&) 2.686 0.015 8406 0.3196 0.0018 RenderRenderer::render_scene_opacity(RenderScene*,RenderDeferred*,int) 0.015 0.015 8406 0.0018 0.0018 RenderScene::update_intersection() 0.015 0.014 8406 0.0018 0.0017 RenderRenderer::render_visualizer(RenderScene*) 0.014 0.014 16812 0.0008 0.0008 WorldSpatial::getIntersection(const WorldBoundSphere&,int,Vector<Node*>&) 2.890 0.014 8406 0.3438 0.0016 RenderRenderer::render_scene(RenderScene*,RenderDeferred*,Texture*&,Texture*&,TextureRender*,int) 0.016 0.014 7222 0.0022 0.0019 Physics::simulation_multiple(float) 0.012 0.012 8406 0.0015 0.0015 ObjectSky::render(int,ObjectSurface*) 0.011 0.011 8406 0.0013 0.0013 WorldSpatial::getIntersection(const WorldBoundFrustum&,const Vec3&,float,Vector<Object*>&) 0.010 0.010 75654 0.0001 0.0001 RenderRenderer::setShaderMaterialAmbientParameters(int) 0.010 0.010 25218 0.0004 0.0004 SortLight(Vector<Light*>&) 0.009 0.009 8406 0.0011 0.0011 ObjectMesh::render(int,ObjectSurface*) 0.009 0.009 8406 0.0011 0.0011 RenderLights::render_forward_light_prob(const Vector<ObjectSurface*>&,const Vector<Node*>&,int) 0.190 0.007 8406 0.0226 0.0008 RenderRenderer::render_scene_transparent(RenderScene*,RenderDeferred*,int,int) 0.006 0.006 8406 0.0007 0.0007 SortSurfaceTransparent(Vector<ObjectSurface*>&,const vec3&) 0.011 0.006 16812 0.0007 0.0004 RenderRenderer::setShader(int,Shader*) 0.010 0.006 8406 0.0012 0.0007 RenderRenderer::render_deferred_decals(Vector<ObjectDecal*>&) 0.005 0.005 8406 0.0006 0.0006 RenderScene::optimize() 0.005 0.004 8406 0.0006 0.0005 World::update_intersection(const BoundFrustum&,const Mat4&,Vector<Node*>&) 0.004 0.004 8406 0.0005 0.0005 WorldSpatial::add_positions() 0.004 0.004 8406 0.0004 0.0004 SortDecalShader(Vector<ObjectDecal*>&,int) 0.004 0.004 8406 0.0004 0.0004 RenderLights::setShaderMaterialLightParameters(int) 0.012 0.004 8406 0.0015 0.0004 RenderLights::renderForwardOpacityLights(RenderScene*,const Vector<ObjectSurface*>&,const Vector<Node*>&,int) 0.003 0.003 8406 0.0004 0.0004 Physics::flush() 0.003 0.003 8406 0.0004 0.0003 RenderRenderer::render_ambient_decals(Vector<ObjectDecal*>&) 0.004 0.003 8406 0.0005 0.0003 RenderRenderer::setMaterial(int,Material*) 0.002 0.002 7222 0.0003 0.0003 PhysicsScene::restoreContacts() 0.002 0.002 8406 0.0002 0.0002 RenderPost::renderFade(Texture*) 0.001 0.001 8406 0.0002 0.0002 RenderLights::renderDecalLights(RenderScene*,Vector<ObjectDecal*>&) 0.001 0.001 16812 0.0001 0.0001 MakeImpostorChain(Vector<ObjectDecal*>&,int) 0.004 -0.015 25218 0.0001 -0.0006 WorldSpatial::getIntersection(const WorldBoundFrustum&,int,Vector<Node*>&) 0.026 -0.015 403488 0.0001 -0.0000 RenderState::setMaterial(Material*) 0.081 -0.034 8406 0.0097 -0.0040 World::getIntersection(const BoundFrustum&,const Mat4&,Vector<Node*>&) 0.403 -1.022 8406 0.0479 -0.1216 RenderScene::getIntersection(BoundFrustum&,Occluder&,const Vector<Node*>&) 0.019 -1.260 8406 0.0022 -0.1499 PathFind::update() 1.203 -2.158 7214 0.1668 -0.2991 Physics::update() My question is what is World::update_multiple() doing? And how I can find out while it takes so much time? Thanks and greets Manuel Link to comment
frustum Posted October 30, 2011 Share Posted October 30, 2011 All "*_analyze" functions are not working with multi-threading correctly. You should disable all engine multi-threading (render_threads 0, pathfind_threads 0, world_threads 0). Profiler uses rdtsc instruction which returns CPU ticks count. This value is different across the CPU threads. Because of that profiler have incorrect time values. update_multiple() is a multi-threaded update function for Nodes. It updates all active Nodes (visible + physics + manual). update_single() is a single-threaded analogue. Link to comment
manuel.gysin Posted October 30, 2011 Author Share Posted October 30, 2011 All "*_analyze" functions are not working with multi-threading correctly. You should disable all engine multi-threading (render_threads 0, pathfind_threads 0, world_threads 0). Profiler uses rdtsc instruction which returns CPU ticks count. This value is different across the CPU threads. Because of that profiler have incorrect time values. update_multiple() is a multi-threaded update function for Nodes. It updates all active Nodes (visible + physics + manual). update_single() is a single-threaded analogue. Hello Frustum Wow, thanks a lot for the fast answer! I run the engine in single-threaded mode and there was no fps problem. But when I switch back to world_threaded 1, fps drops on factor 10! That is strange. Single: 600 FPS Threaded: 60 FPS Thanks again Manuel Link to comment
frustum Posted October 31, 2011 Share Posted October 31, 2011 What type of CPU do you use? This problem can be related to the hyper-threading. Or some background process. Link to comment
manuel.gysin Posted October 31, 2011 Author Share Posted October 31, 2011 What type of CPU do you use? This problem can be related to the hyper-threading. Or some background process. Hello Frustum It's an AMD Phenom 2 X4, system is debian sid with linux kernel 3.0 x86_64. Greets Manuel Link to comment
manuel.gysin Posted November 1, 2011 Author Share Posted November 1, 2011 New core i7 arrived, gona test it and report back later. :) Link to comment
steve3d Posted November 9, 2011 Share Posted November 9, 2011 render_threads 0? Unigine support multi-threaded rendering now?? Link to comment
ulf.schroeter Posted November 9, 2011 Share Posted November 9, 2011 Unigine support multi-threaded rendering now?? Object culling and update operations can accelerated with multiple threads, the actual rendering (submission of draw calls) will be handled single-threaded Link to comment
steve3d Posted November 9, 2011 Share Posted November 9, 2011 Thanks ulf, I already know that :) Link to comment
Recommended Posts