[Bf-blender-cvs] [bbcb9c6] master: Cycles: Resolve ridiculous amount of memory used by spatial split builder

Sergey Sharybin noreply at git.blender.org
Wed Apr 13 14:25:42 CEST 2016


Commit: bbcb9c68c938980b780e92f8dcc68d5fc5359e10
Author: Sergey Sharybin
Date:   Wed Apr 13 14:22:53 2016 +0200
Branches: master
https://developer.blender.org/rBbbcb9c68c938980b780e92f8dcc68d5fc5359e10

Cycles: Resolve ridiculous amount of memory used by spatial split builder

This was only visible on systems with lots of threads and root of the issue
was that we've been pre-allocating too much memory for all the threads.

Now we only pre-allocate data for the main thread and rest of the threads
does allocation on-demand.

This brings down memory usage from 36Gig to 6.9Gig when building spatial
split for the Bunny.blend file on our Intel beast.

Originally regression was happened by the threaded spacial split builder
commit.

===================================================================

M	intern/cycles/bvh/bvh_build.cpp
M	intern/cycles/bvh/bvh_split.cpp

===================================================================

diff --git a/intern/cycles/bvh/bvh_build.cpp b/intern/cycles/bvh/bvh_build.cpp
index 255051c..d666805 100644
--- a/intern/cycles/bvh/bvh_build.cpp
+++ b/intern/cycles/bvh/bvh_build.cpp
@@ -280,8 +280,8 @@ BVHNode* BVHBuild::run()
 		size_t num_bins = max(root.size(), (int)BVHParams::NUM_SPATIAL_BINS) - 1;
 		foreach(BVHSpatialStorage &storage, spatial_storage) {
 			storage.right_bounds.clear();
-			storage.right_bounds.resize(num_bins);
 		}
+		spatial_storage[0].right_bounds.resize(num_bins);
 	}
 	spatial_free_index = 0;
 
diff --git a/intern/cycles/bvh/bvh_split.cpp b/intern/cycles/bvh/bvh_split.cpp
index 7b2e342..9185bd9 100644
--- a/intern/cycles/bvh/bvh_split.cpp
+++ b/intern/cycles/bvh/bvh_split.cpp
@@ -54,6 +54,7 @@ BVHObjectSplit::BVHObjectSplit(BVHBuild *builder,
 		/* sweep right to left and determine bounds. */
 		BoundBox right_bounds = BoundBox::empty;
 
+		storage_->right_bounds.resize(range.size());
 		for(int i = range.size() - 1; i > 0; i--) {
 			right_bounds.grow(ref_ptr[i].bounds());
 			storage_->right_bounds[i - 1] = right_bounds;
@@ -160,6 +161,7 @@ BVHSpatialSplit::BVHSpatialSplit(const BVHBuild& builder,
 		/* sweep right to left and determine bounds. */
 		BoundBox right_bounds = BoundBox::empty;
 
+		storage_->right_bounds.resize(BVHParams::NUM_SPATIAL_BINS);
 		for(int i = BVHParams::NUM_SPATIAL_BINS - 1; i > 0; i--) {
 			right_bounds.grow(storage_->bins[dim][i].bounds);
 			storage_->right_bounds[i - 1] = right_bounds;




More information about the Bf-blender-cvs mailing list