[Bf-blender-cvs] [3b53fff] master: Cycles: revert async CUDA changes, these are giving too much trouble still.

Brecht Van Lommel noreply at git.blender.org
Mon May 19 19:33:30 CEST 2014


Commit: 3b53fffb7788e19a0d05b8549aadbadf49279ca2
Author: Brecht Van Lommel
Date:   Mon May 19 16:39:25 2014 +0200
https://developer.blender.org/rB3b53fffb7788e19a0d05b8549aadbadf49279ca2

Cycles: revert async CUDA changes, these are giving too much trouble still.

Fixes T40027. This means we get more CPU usage again when using multiple CUDA,
but the impact on performance is too big a problem with the current code.

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

M	intern/cycles/device/device_cuda.cpp

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

diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp
index 6895521..b19f5e2 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -41,14 +41,11 @@ public:
 	CUdevice cuDevice;
 	CUcontext cuContext;
 	CUmodule cuModule;
-	CUstream cuStream;
-	CUevent tileDone;
 	map<device_ptr, bool> tex_interp_map;
 	int cuDevId;
 	int cuDevArchitecture;
 	bool first_error;
 	bool use_texture_storage;
-	unsigned int target_update_frequency;
 
 	struct PixelMem {
 		GLuint cuPBO;
@@ -180,8 +177,6 @@ public:
 		first_error = true;
 		background = background_;
 		use_texture_storage = true;
-		/* we try an update / sync every 1000 ms */
-		target_update_frequency = 1000;
 
 		cuDevId = info.num;
 		cuDevice = 0;
@@ -212,9 +207,6 @@ public:
 		if(cuda_error_(result, "cuCtxCreate"))
 			return;
 
-		cuda_assert(cuStreamCreate(&cuStream, 0));
-		cuda_assert(cuEventCreate(&tileDone, 0x1));
-
 		int major, minor;
 		cuDeviceComputeCapability(&major, &minor, cuDevId);
 		cuDevArchitecture = major*100 + minor*10;
@@ -231,8 +223,6 @@ public:
 	{
 		task_pool.stop();
 
-		cuda_assert(cuEventDestroy(tileDone));
-		cuda_assert(cuStreamDestroy(cuStream));
 		cuda_assert(cuCtxDestroy(cuContext));
 	}
 
@@ -665,15 +655,9 @@ public:
 
 		cuda_assert(cuFuncSetCacheConfig(cuPathTrace, CU_FUNC_CACHE_PREFER_L1));
 		cuda_assert(cuFuncSetBlockShape(cuPathTrace, xthreads, ythreads, 1));
+		cuda_assert(cuLaunchGrid(cuPathTrace, xblocks, yblocks));
 
-		if(info.display_device) {
-			/* don't use async for device used for display, locks up UI too much */
-			cuda_assert(cuLaunchGrid(cuPathTrace, xblocks, yblocks));
-			cuda_assert(cuCtxSynchronize());
-		}
-		else {
-			cuda_assert(cuLaunchGridAsync(cuPathTrace, xblocks, yblocks, cuStream));
-		}
+		cuda_assert(cuCtxSynchronize());
 
 		cuda_pop_context();
 	}
@@ -1024,10 +1008,6 @@ public:
 				int start_sample = tile.start_sample;
 				int end_sample = tile.start_sample + tile.num_samples;
 
-				boost::posix_time::ptime start_time(boost::posix_time::microsec_clock::local_time());
-				boost::posix_time::ptime last_time = start_time;
-				int sync_sample = 10;
-
 				for(int sample = start_sample; sample < end_sample; sample++) {
 					if (task->get_cancel()) {
 						if(task->need_finish_queue == false)
@@ -1037,28 +1017,8 @@ public:
 					path_trace(tile, sample, branched);
 
 					tile.sample = sample + 1;
-					task->update_progress(tile);
 
-					if(!info.display_device && sample == sync_sample) {
-						cuda_push_context();
-						cuda_assert(cuEventRecord(tileDone, cuStream));
-						cuda_assert(cuEventSynchronize(tileDone));
-
-						/* Do some time keeping to find out if we need to sync less */
-						boost::posix_time::ptime current_time(boost::posix_time::microsec_clock::local_time());
-						boost::posix_time::time_duration sample_duration = current_time - last_time;
-
-						long msec = sample_duration.total_milliseconds();
-						float scaling_factor = (float)target_update_frequency / (float)msec;
-
-						/* sync at earliest next sample and probably later */
-						sync_sample = (sample + 1) + sync_sample * (int)ceil(scaling_factor);
-
-						sync_sample = min(end_sample - 1, sync_sample); // make sure we sync the last sample always
-
-						last_time = current_time;
-						cuda_pop_context();
-					}
+					task->update_progress(tile);
 				}
 
 				task->release_tile(tile);




More information about the Bf-blender-cvs mailing list