[Bf-blender-cvs] [caaf0e4] soc-2014-cycles: Cycles: Use Bit Manipulation Instruction Sets in the AVX2 kernel, helps a bit as well.

Thomas Dinges noreply at git.blender.org
Fri May 16 16:51:47 CEST 2014


Commit: caaf0e484da8d692e9c63be89af9a9404c05dc1d
Author: Thomas Dinges
Date:   Fri May 16 16:45:23 2014 +0200
https://developer.blender.org/rBcaaf0e484da8d692e9c63be89af9a9404c05dc1d

Cycles: Use Bit Manipulation Instruction Sets in the AVX2 kernel, helps a bit as well.

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

M	intern/cycles/CMakeLists.txt
M	intern/cycles/SConscript
M	intern/cycles/util/util_system.cpp

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

diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt
index 7a1fea8..027c5bb 100644
--- a/intern/cycles/CMakeLists.txt
+++ b/intern/cycles/CMakeLists.txt
@@ -52,7 +52,7 @@ elseif(CMAKE_COMPILER_IS_GNUCC)
 		set(CYCLES_SSE3_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -mfpmath=sse")
 		set(CYCLES_SSE41_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mfpmath=sse")
 		set(CYCLES_AVX_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx -mfpmath=sse")
-		set(CYCLES_AVX2_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mfma -mfpmath=sse")
+		set(CYCLES_AVX2_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mfma -mbmi -mbmi2 -mfpmath=sse")
 	endif()
 	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math")
 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
@@ -62,7 +62,7 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
 		set(CYCLES_SSE3_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3")
 		set(CYCLES_SSE41_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1")
 		set(CYCLES_AVX_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx")
-		set(CYCLES_AVX2_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx -mavx2 —mfma")
+		set(CYCLES_AVX2_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx -mavx2 —mfma -mbmi -mbmi2")
 	endif()
 	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math")
 endif()
diff --git a/intern/cycles/SConscript b/intern/cycles/SConscript
index f3481df..65b7f24 100644
--- a/intern/cycles/SConscript
+++ b/intern/cycles/SConscript
@@ -108,7 +108,7 @@ else:
 
     if (env['C_COMPILER_ID'] == 'gcc' and env['CCVERSION'] >= '4.6') or (env['C_COMPILER_ID'] == 'clang' and env['CCVERSION'] >= '3.1'):
         kernel_flags['avx'] = kernel_flags['sse41'] + ' -mavx'
-        kernel_flags['avx2'] = kernel_flags['avx'] + ' -mavx2 -mfma'
+        kernel_flags['avx2'] = kernel_flags['avx'] + ' -mavx2 -mfma -mbmi -mbmi2'
 
 for kernel_type in kernel_flags.keys():
     defs.append('WITH_KERNEL_' + kernel_type.upper())
diff --git a/intern/cycles/util/util_system.cpp b/intern/cycles/util/util_system.cpp
index 0bc81d1..7c04455 100644
--- a/intern/cycles/util/util_system.cpp
+++ b/intern/cycles/util/util_system.cpp
@@ -131,6 +131,8 @@ struct CPUCapabilities {
 	bool xop;
 	bool fma3;
 	bool fma4;
+	bool bmi1;
+	bool bmi2;
 };
 
 static CPUCapabilities& system_cpu_capabilities()
@@ -183,6 +185,8 @@ static CPUCapabilities& system_cpu_capabilities()
 			}
 
 			__cpuid(result, 0x00000007);
+			caps.bmi1 = (result[1] & ((int)1 << 3)) != 0;
+			caps.bmi2 = (result[1] & ((int)1 << 8)) != 0;
 			caps.avx2 = (result[1] & ((int)1 << 5)) != 0;
 		}
 
@@ -228,7 +232,7 @@ bool system_cpu_support_avx()
 bool system_cpu_support_avx2()
 {
 	CPUCapabilities& caps = system_cpu_capabilities();
-	return caps.sse && caps.sse2 && caps.sse3 && caps.ssse3 && caps.sse41 && caps.avx && caps.avx2 && caps.fma3;
+	return caps.sse && caps.sse2 && caps.sse3 && caps.ssse3 && caps.sse41 && caps.avx && caps.avx2 && caps.fma3 && caps.bmi1 && caps.bmi2;
 }
 #else




More information about the Bf-blender-cvs mailing list