Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/CMakeLists.txt
| Show All 35 Lines | elseif(WIN32 AND MSVC) | ||||
| if(NOT MSVC_VERSION LESS 1700) | if(NOT MSVC_VERSION LESS 1700) | ||||
| set(CYCLES_AVX_ARCH_FLAGS "/arch:AVX") | set(CYCLES_AVX_ARCH_FLAGS "/arch:AVX") | ||||
| set(CYCLES_AVX2_ARCH_FLAGS "/arch:AVX /arch:AVX2") | set(CYCLES_AVX2_ARCH_FLAGS "/arch:AVX /arch:AVX2") | ||||
| elseif(NOT CMAKE_CL_64) | elseif(NOT CMAKE_CL_64) | ||||
| set(CYCLES_AVX_ARCH_FLAGS "/arch:SSE2") | set(CYCLES_AVX_ARCH_FLAGS "/arch:SSE2") | ||||
| set(CYCLES_AVX2_ARCH_FLAGS "/arch:SSE2") | set(CYCLES_AVX2_ARCH_FLAGS "/arch:SSE2") | ||||
| endif() | endif() | ||||
| # Unlike GCC/clang we still use fast math, because there is no fine | |||||
| # grained control and the speedup we get here is too big to ignore. | |||||
| set(CYCLES_KERNEL_FLAGS "/fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | |||||
| # there is no /arch:SSE3, but intrinsics are available anyway | # there is no /arch:SSE3, but intrinsics are available anyway | ||||
| if(CMAKE_CL_64) | if(CMAKE_CL_64) | ||||
| set(CYCLES_SSE2_KERNEL_FLAGS "/fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | set(CYCLES_SSE2_KERNEL_FLAGS "${CYCLES_KERNEL_FLAGS}") | ||||
| set(CYCLES_SSE3_KERNEL_FLAGS "/fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | set(CYCLES_SSE3_KERNEL_FLAGS "${CYCLES_KERNEL_FLAGS}") | ||||
| set(CYCLES_SSE41_KERNEL_FLAGS "/fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | set(CYCLES_SSE41_KERNEL_FLAGS "${CYCLES_KERNEL_FLAGS}") | ||||
| set(CYCLES_AVX_KERNEL_FLAGS "${CYCLES_AVX_ARCH_FLAGS} /fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | set(CYCLES_AVX_KERNEL_FLAGS "${CYCLES_AVX_ARCH_FLAGS} ${CYCLES_KERNEL_FLAGS}") | ||||
| set(CYCLES_AVX2_KERNEL_FLAGS "${CYCLES_AVX2_ARCH_FLAGS} /fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | set(CYCLES_AVX2_KERNEL_FLAGS "${CYCLES_AVX2_ARCH_FLAGS} ${CYCLES_KERNEL_FLAGS}") | ||||
| else() | else() | ||||
| set(CYCLES_SSE2_KERNEL_FLAGS "/arch:SSE2 /fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | set(CYCLES_SSE2_KERNEL_FLAGS "/arch:SSE2 ${CYCLES_KERNEL_FLAGS}") | ||||
| set(CYCLES_SSE3_KERNEL_FLAGS "/arch:SSE2 /fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | set(CYCLES_SSE3_KERNEL_FLAGS "/arch:SSE2 ${CYCLES_KERNEL_FLAGS}") | ||||
| set(CYCLES_SSE41_KERNEL_FLAGS "/arch:SSE2 /fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | set(CYCLES_SSE41_KERNEL_FLAGS "/arch:SSE2 ${CYCLES_KERNEL_FLAGS}") | ||||
| set(CYCLES_AVX_KERNEL_FLAGS "${CYCLES_AVX_ARCH_FLAGS} /fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | set(CYCLES_AVX_KERNEL_FLAGS "${CYCLES_AVX_ARCH_FLAGS} ${CYCLES_KERNEL_FLAGS}") | ||||
| set(CYCLES_AVX2_KERNEL_FLAGS "${CYCLES_AVX2_ARCH_FLAGS} /fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | set(CYCLES_AVX2_KERNEL_FLAGS "${CYCLES_AVX2_ARCH_FLAGS} ${CYCLES_KERNEL_FLAGS}") | ||||
| endif() | endif() | ||||
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CYCLES_KERNEL_FLAGS}") | ||||
| set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Ox") | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Ox") | ||||
| set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Ox") | set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Ox") | ||||
| set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /Ox") | set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /Ox") | ||||
| elseif(CMAKE_COMPILER_IS_GNUCC OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) | |||||
| set(CYCLES_KERNEL_FLAGS "/fp:fast -D_CRT_SECURE_NO_WARNINGS /GS-") | |||||
| elseif(CMAKE_COMPILER_IS_GNUCC) | |||||
| check_cxx_compiler_flag(-msse CXX_HAS_SSE) | check_cxx_compiler_flag(-msse CXX_HAS_SSE) | ||||
| check_cxx_compiler_flag(-mavx CXX_HAS_AVX) | check_cxx_compiler_flag(-mavx CXX_HAS_AVX) | ||||
| check_cxx_compiler_flag(-mavx2 CXX_HAS_AVX2) | check_cxx_compiler_flag(-mavx2 CXX_HAS_AVX2) | ||||
| set(CYCLES_KERNEL_FLAGS "-ffast-math") | |||||
| if(CXX_HAS_SSE) | # Assume no signal trapping for better code generation. | ||||
| set(CYCLES_SSE2_KERNEL_FLAGS "-ffast-math -msse -msse2 -mfpmath=sse") | set(CYCLES_KERNEL_FLAGS "-fno-trapping-math") | ||||
| set(CYCLES_SSE3_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -mfpmath=sse") | # Avoid overhead of setting errno for NaNs. | ||||
| set(CYCLES_SSE41_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mfpmath=sse") | set(CYCLES_KERNEL_FLAGS "${CYCLES_KERNEL_FLAGS} -fno-math-errno") | ||||
| endif() | # Let compiler optimize 0.0 - x without worrying about signed zeros. | ||||
| if(CXX_HAS_AVX) | set(CYCLES_KERNEL_FLAGS "${CYCLES_KERNEL_FLAGS} -fno-signed-zeros") | ||||
| set(CYCLES_AVX_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx -mfpmath=sse") | |||||
| endif() | if(CMAKE_COMPILER_IS_GNUCC) | ||||
| if(CXX_HAS_AVX2) | # Assume no signal trapping for better code generation. | ||||
| set(CYCLES_AVX2_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mfma -mlzcnt -mbmi -mbmi2 -mf16c -mfpmath=sse") | set(CYCLES_KERNEL_FLAGS "${CYCLES_KERNEL_FLAGS} -fno-signaling-nans") | ||||
| # Assume a fixed rounding mode for better constant folding. | |||||
| set(CYCLES_KERNEL_FLAGS "${CYCLES_KERNEL_FLAGS} -fno-rounding-math") | |||||
| endif() | endif() | ||||
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math -fno-finite-math-only") | |||||
| elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") | |||||
| check_cxx_compiler_flag(-msse CXX_HAS_SSE) | |||||
| check_cxx_compiler_flag(-mavx CXX_HAS_AVX) | |||||
| check_cxx_compiler_flag(-mavx2 CXX_HAS_AVX2) | |||||
| set(CYCLES_KERNEL_FLAGS "-ffast-math") | |||||
| if(CXX_HAS_SSE) | if(CXX_HAS_SSE) | ||||
| set(CYCLES_SSE2_KERNEL_FLAGS "-ffast-math -msse -msse2") | if(CMAKE_COMPILER_IS_GNUCC) | ||||
| set(CYCLES_SSE3_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3") | set(CYCLES_KERNEL_FLAGS "${CYCLES_KERNEL_FLAGS} -mfpmath=sse") | ||||
| set(CYCLES_SSE41_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1") | |||||
| endif() | endif() | ||||
| set(CYCLES_SSE2_KERNEL_FLAGS "${CYCLES_KERNEL_FLAGS} -msse -msse2") | |||||
| set(CYCLES_SSE3_KERNEL_FLAGS "${CYCLES_SSE2_KERNEL_FLAGS} -msse3 -mssse3") | |||||
| set(CYCLES_SSE41_KERNEL_FLAGS "${CYCLES_SSE3_KERNEL_FLAGS} -msse4.1") | |||||
| if(CXX_HAS_AVX) | if(CXX_HAS_AVX) | ||||
| set(CYCLES_AVX_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx") | set(CYCLES_AVX_KERNEL_FLAGS "${CYCLES_SSE41_KERNEL_FLAGS} -mavx") | ||||
| endif() | endif() | ||||
| if(CXX_HAS_AVX2) | if(CXX_HAS_AVX2) | ||||
| set(CYCLES_AVX2_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mfma -mlzcnt -mbmi -mbmi2 -mf16c") | set(CYCLES_AVX2_KERNEL_FLAGS "${CYCLES_SSE41_KERNEL_FLAGS} -mavx -mavx2 -mfma -mlzcnt -mbmi -mbmi2 -mf16c") | ||||
| endif() | endif() | ||||
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math -fno-finite-math-only") | endif() | ||||
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CYCLES_KERNEL_FLAGS}") | |||||
| endif() | endif() | ||||
| if(CXX_HAS_SSE) | if(CXX_HAS_SSE) | ||||
| add_definitions( | add_definitions( | ||||
| -DWITH_KERNEL_SSE2 | -DWITH_KERNEL_SSE2 | ||||
| -DWITH_KERNEL_SSE3 | -DWITH_KERNEL_SSE3 | ||||
| -DWITH_KERNEL_SSE41 | -DWITH_KERNEL_SSE41 | ||||
| ) | ) | ||||
| ▲ Show 20 Lines • Show All 161 Lines • Show Last 20 Lines | |||||