Blender Git Commit Log
Git Commits -> Revision 2330cec
Revision 2330cec by Germano Cavalcante (master) June 11, 2021, 13:45 (GMT) |
Refactor: Draw Cache: use 'BLI_task_parallel_range' This is an adaptation of {D11488}. A disadvantage of manually setting the iter ranges per thread is that we don't know how many threads are running in the background and so we don't know how to best distribute the ranges. To solve this limitation we can use `parallel_reduce` and thus let the driver choose the best distribution of ranges among the threads. This proved to be especially beneficial for computers with few cores. **Benchmarking:** Here's the result on an 4-core laptop: ||master:|PATCH: |---|---|---| |large_mesh_editing:|Average: 5.203638 FPS|Average: 5.398925 FPS ||rdata 15ms iter 43ms (frame 193ms)|rdata 14ms iter 36ms (frame 187ms) Here's the result on an 8-core PC: ||master:|PATCH: |---|---|---| |large_mesh_editing:|Average: 15.267482 FPS|Average: 15.906881 FPS ||rdata 9ms iter 28ms (frame 65ms)|rdata 9ms iter 25ms (frame 63ms) |large_mesh_editing_ledge: |Average: 15.145966 FPS|Average: 15.520474 FPS ||rdata 9ms iter 29ms (frame 65ms)|rdata 9ms iter 25ms (frame 64ms) |looptris_test:|Average: 4.001917 FPS|Average: 4.061105 FPS ||rdata 12ms iter 90ms (frame 236ms)|rdata 12ms iter 87ms (frame 230ms) |subdiv_mesh_cage_and_final:|Average: 1.917769 FPS|Average: 1.971790 FPS ||rdata 7ms iter 37ms (frame 261ms)|rdata 7ms iter 31ms (frame 258ms) ||rdata 7ms iter 38ms (frame 252ms)|rdata 7ms iter 33ms (frame 249ms) |subdiv_mesh_final_only:|Average: 6.387240 FPS|Average: 6.591251 FPS ||rdata 3ms iter 25ms (frame 151ms)|rdata 3ms iter 16ms (frame 145ms) |subdiv_mesh_final_only_ledge:|Average: 6.247393 FPS|Average: 6.596024 FPS ||rdata 3ms iter 26ms (frame 158ms)|rdata 3ms iter 16ms (frame 148ms) **Notes:** - The improvement can only be noticed if all extracts are multithreaded. - This patch touches different areas of the code, so it can be split into another patch if the idea is accepted. These screenshots show how threads behave in a quadcore: Master: {F10164664} Patch: {F10164666} Differential Revision: https://developer.blender.org/D11558 |
Commit Details:
Full Hash: 2330cec2c6a7632459c21f51723497e349a042bf
Parent Commit: fe22635
Lines Changed: +626, -1193
12 Modified Paths:
/source/blender/draw/intern/draw_cache_extract_mesh.cc (+266, -551) (Diff)
/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c (+234, -241) (Diff)
/source/blender/draw/intern/draw_cache_extract_mesh_private.h (+12, -233) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc (+27, -31) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc (+7, -7) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc (+20, -31) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc (+9, -9) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc (+9, -9) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc (+15, -26) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc (+17, -30) (Diff)
/source/blender/gpu/GPU_index_buffer.h (+4, -10) (Diff)
/source/blender/gpu/intern/gpu_index_buffer.cc (+6, -15) (Diff)
/source/blender/draw/intern/draw_cache_extract_mesh_extractors.c (+234, -241) (Diff)
/source/blender/draw/intern/draw_cache_extract_mesh_private.h (+12, -233) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc (+27, -31) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc (+7, -7) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc (+20, -31) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc (+9, -9) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc (+9, -9) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc (+15, -26) (Diff)
/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc (+17, -30) (Diff)
/source/blender/gpu/GPU_index_buffer.h (+4, -10) (Diff)
/source/blender/gpu/intern/gpu_index_buffer.cc (+6, -15) (Diff)