[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60613] trunk/blender/intern/cycles: Cycles / CUDA:

Thomas Dinges blender at dingto.org
Tue Oct 8 17:29:28 CEST 2013


Revision: 60613
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60613
Author:   dingto
Date:     2013-10-08 15:29:28 +0000 (Tue, 08 Oct 2013)
Log Message:
-----------
Cycles / CUDA:
* Remove support for  CUDA Toolkit 4.x, only Toolkit 5.0 and above are supported now.
* Remove support for sm_1x cards (< Fermi) for good. We didn't officially support those cards for a few releases already, now remove some special code that was still there. 

Modified Paths:
--------------
    trunk/blender/intern/cycles/device/device_cuda.cpp
    trunk/blender/intern/cycles/kernel/CMakeLists.txt
    trunk/blender/intern/cycles/kernel/SConscript
    trunk/blender/intern/cycles/kernel/kernel_shader.h

Modified: trunk/blender/intern/cycles/device/device_cuda.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_cuda.cpp	2013-10-08 15:23:19 UTC (rev 60612)
+++ trunk/blender/intern/cycles/device/device_cuda.cpp	2013-10-08 15:29:28 UTC (rev 60613)
@@ -227,14 +227,12 @@
 
 	bool support_device(bool experimental)
 	{
-		if(!experimental) {
-			int major, minor;
-			cuDeviceComputeCapability(&major, &minor, cuDevId);
+		int major, minor;
+		cuDeviceComputeCapability(&major, &minor, cuDevId);
 
-			if(major < 2) {
-				cuda_error_message(string_printf("CUDA device supported only with compute capability 2.0 or up, found %d.%d.", major, minor));
-				return false;
-			}
+		if(major < 2) {
+			cuda_error_message(string_printf("CUDA device supported only with compute capability 2.0 or up, found %d.%d.", major, minor));
+			return false;
 		}
 
 		return true;
@@ -286,8 +284,12 @@
 			cuda_error_message("CUDA nvcc compiler version could not be parsed.");
 			return "";
 		}
+		if(cuda_version < 50) {
+			printf("Unsupported CUDA version %d.%d detected, you need CUDA 5.0.\n", cuda_version/10, cuda_version%10);
+			return "";
+		}
 
-		if(cuda_version != 50)
+		else if(cuda_version > 50)
 			printf("CUDA version %d.%d detected, build may succeed but only CUDA 5.0 is officially supported.\n", cuda_version/10, cuda_version%10);
 
 		/* compile */
@@ -296,36 +298,14 @@
 		const int machine = system_cpu_bits();
 		string arch_flags;
 
-		/* build flags depending on CUDA version and arch */
-		if(cuda_version < 50) {
-			/* CUDA 4.x */
-			if(major == 1) {
-				/* sm_1x */
-				arch_flags = "--maxrregcount=24 --opencc-options -OPT:Olimit=0";
-			}
-			else if(major == 2) {
-				/* sm_2x */
-				arch_flags = "--maxrregcount=24";
-			}
-			else {
-				/* sm_3x */
-				arch_flags = "--maxrregcount=32";
-			}
+		/* CUDA 5.x build flags for different archs */
+		if(major == 2) {
+			/* sm_2x */
+			arch_flags = "--maxrregcount=32 --use_fast_math";
 		}
-		else {
-			/* CUDA 5.x */
-			if(major == 1) {
-				/* sm_1x */
-				arch_flags = "--maxrregcount=24 --opencc-options -OPT:Olimit=0 --use_fast_math";
-			}
-			else if(major == 2) {
-				/* sm_2x */
-				arch_flags = "--maxrregcount=32 --use_fast_math";
-			}
-			else {
-				/* sm_3x */
-				arch_flags = "--maxrregcount=32 --use_fast_math";
-			}
+		else if(major == 3) {
+			/* sm_3x */
+			arch_flags = "--maxrregcount=32 --use_fast_math";
 		}
 
 		double starttime = time_dt();

Modified: trunk/blender/intern/cycles/kernel/CMakeLists.txt
===================================================================
--- trunk/blender/intern/cycles/kernel/CMakeLists.txt	2013-10-08 15:23:19 UTC (rev 60612)
+++ trunk/blender/intern/cycles/kernel/CMakeLists.txt	2013-10-08 15:29:28 UTC (rev 60613)
@@ -151,36 +151,16 @@
 
 		set(cuda_version_flags "-D__KERNEL_CUDA_VERSION__=${CUDA_VERSION}")
 
-		# build flags depending on CUDA version and arch
-		if(CUDA_VERSION LESS 50)
-			# CUDA 4.x
-			if(${arch} MATCHES "sm_1[0-9]")
-				# sm_1x
-				set(cuda_arch_flags "--maxrregcount=24 --opencc-options -OPT:Olimit=0")
-			elseif(${arch} MATCHES "sm_2[0-9]")
-				# sm_2x
-				set(cuda_arch_flags "--maxrregcount=24")
-			else()
-				# sm_3x
-				set(cuda_arch_flags "--maxrregcount=32")
-			endif()
-
-			set(cuda_math_flags "")
-		else()
-			# CUDA 5.x
-			if(${arch} MATCHES "sm_1[0-9]")
-				# sm_1x
-				set(cuda_arch_flags "--maxrregcount=24 --opencc-options -OPT:Olimit=0")
-			elseif(${arch} MATCHES "sm_2[0-9]")
-				# sm_2x
-				set(cuda_arch_flags "--maxrregcount=32")
-			else()
-				# sm_3x
-				set(cuda_arch_flags "--maxrregcount=32")
-			endif()
-
-			set(cuda_math_flags "--use_fast_math")
+		# CUDA 5.x build flags for different archs
+		if(${arch} MATCHES "sm_2[0-9]")
+			# sm_2x
+			set(cuda_arch_flags "--maxrregcount=32")
+		elseif(${arch} MATCHES "sm_3[0-9]")
+			# sm_3x
+			set(cuda_arch_flags "--maxrregcount=32")
 		endif()
+
+		set(cuda_math_flags "--use_fast_math")
 		
 		if(CUDA_VERSION LESS 50 AND ${arch} MATCHES "sm_35")
 			message(WARNING "Can't build kernel for CUDA sm_35 architecture, skipping")

Modified: trunk/blender/intern/cycles/kernel/SConscript
===================================================================
--- trunk/blender/intern/cycles/kernel/SConscript	2013-10-08 15:23:19 UTC (rev 60612)
+++ trunk/blender/intern/cycles/kernel/SConscript	2013-10-08 15:29:28 UTC (rev 60613)
@@ -86,34 +86,14 @@
     for arch in cuda_archs:
         cubin_file = os.path.join(build_dir, "kernel_%s.cubin" % arch)
 
-		# build flags depending on CUDA version and arch
-        if cuda_version < 50:
-            if arch == "sm_35":
-                print("Can't build kernel for CUDA sm_35 architecture, skipping")
-                continue
+        # CUDA 5.x build flags for different archs
+        if arch.startswith("sm_2"):
+            # sm_2x
+            cuda_arch_flags = "--maxrregcount=32 --use_fast_math"
+        elif arch.startswith("sm_3"):
+            # sm_3x
+            cuda_arch_flags = "--maxrregcount=32 --use_fast_math"
 
-            # CUDA 4.x
-            if arch.startswith("sm_1"):
-                # sm_1x
-                cuda_arch_flags = "--maxrregcount=24 --opencc-options -OPT:Olimit=0"
-            elif arch.startswith("sm_2"):
-                # sm_2x
-                cuda_arch_flags = "--maxrregcount=24"
-            else:
-                # sm_3x
-                cuda_arch_flags = "--maxrregcount=32"
-        else:
-            # CUDA 5.x
-            if arch.startswith("sm_1"):
-                # sm_1x
-                cuda_arch_flags = "--maxrregcount=24 --opencc-options -OPT:Olimit=0 --use_fast_math"
-            elif arch.startswith("sm_2"):
-                # sm_2x
-                cuda_arch_flags = "--maxrregcount=32 --use_fast_math"
-            else:
-                # sm_3x
-                cuda_arch_flags = "--maxrregcount=32 --use_fast_math"
-
         command = "\"%s\" -arch=%s %s %s \"%s\" -o \"%s\"" % (nvcc, arch, nvcc_flags, cuda_arch_flags, kernel_file, cubin_file)
 
         kernel.Command(cubin_file, 'kernel.cu', command)

Modified: trunk/blender/intern/cycles/kernel/kernel_shader.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_shader.h	2013-10-08 15:23:19 UTC (rev 60612)
+++ trunk/blender/intern/cycles/kernel/kernel_shader.h	2013-10-08 15:29:28 UTC (rev 60613)
@@ -36,15 +36,8 @@
 /* ShaderData setup from incoming ray */
 
 #ifdef __OBJECT_MOTION__
-#if defined(__KERNEL_CUDA_VERSION__) && __KERNEL_CUDA_VERSION__ <= 42
-__device_noinline
-#else
-__device
-#endif
-void shader_setup_object_transforms(KernelGlobals *kg, ShaderData *sd, float time)
+__device void shader_setup_object_transforms(KernelGlobals *kg, ShaderData *sd, float time)
 {
-	/* note that this is a separate non-inlined function to work around crash
-	 * on CUDA sm 2.0, otherwise kernel execution crashes (compiler bug?) */
 	if(sd->flag & SD_OBJECT_MOTION) {
 		sd->ob_tfm = object_fetch_transform_motion(kg, sd->object, time);
 		sd->ob_itfm= transform_quick_inverse(sd->ob_tfm);
@@ -56,12 +49,7 @@
 }
 #endif
 
-#if defined(__KERNEL_CUDA_VERSION__) && __KERNEL_CUDA_VERSION__ <= 42
-__device_noinline
-#else
-__device
-#endif
-void shader_setup_from_ray(KernelGlobals *kg, ShaderData *sd,
+__device void shader_setup_from_ray(KernelGlobals *kg, ShaderData *sd,
 	const Intersection *isect, const Ray *ray, int bounce)
 {
 #ifdef __INSTANCING__
@@ -249,12 +237,7 @@
 
 /* ShaderData setup from position sampled on mesh */
 
-#if defined(__KERNEL_CUDA_VERSION__) && __KERNEL_CUDA_VERSION__ <= 42
-__device_noinline
-#else
-__device
-#endif
-void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
+__device void shader_setup_from_sample(KernelGlobals *kg, ShaderData *sd,
 	const float3 P, const float3 Ng, const float3 I,
 	int shader, int object, int prim, float u, float v, float t, float time, int bounce, int segment)
 {




More information about the Bf-blender-cvs mailing list