From bbcb9c68c938980b780e92f8dcc68d5fc5359e10 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 13 Apr 2016 14:22:53 +0200 Subject: 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. --- intern/cycles/bvh/bvh_split.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'intern/cycles/bvh/bvh_split.cpp') diff --git a/intern/cycles/bvh/bvh_split.cpp b/intern/cycles/bvh/bvh_split.cpp index 7b2e342637f..9185bd99d10 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; -- cgit v1.2.3