[Bf-blender-cvs] [99a6dba0862] cycles_oneapi: Build: More flexible oneAPI options, added explicit inlining threshold

Werner, Stefan noreply at git.blender.org
Thu May 19 21:42:12 CEST 2022


Commit: 99a6dba08626b739e349c284dcf7cb6175b9964a
Author: Werner, Stefan
Date:   Thu May 19 21:41:30 2022 +0200
Branches: cycles_oneapi
https://developer.blender.org/rB99a6dba08626b739e349c284dcf7cb6175b9964a

Build: More flexible oneAPI options, added explicit inlining threshold

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

M	CMakeLists.txt
M	intern/cycles/kernel/CMakeLists.txt

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

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 51dff4d647e..455d617ba6b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -457,16 +457,13 @@ if(NOT APPLE)
   option(WITH_CYCLES_ONEAPI_BINARIES "Enable Ahead-Of-Time compilation for Cycles oneAPI device" OFF)
   option(WITH_CYCLES_ONEAPI_SYCL_HOST_ENABLED "Enable use of SYCL host (CPU) device execution by oneAPI implementation. This option is for debugging purposes and impacts GPU execution." OFF)
 
-  SET (CYCLES_ONEAPI_SYCL_TARGET GPUTarget CACHE STRING "oneAPI offload target to build binaries for")
-  # List of available options can be found here:
   # https://www.intel.com/content/www/us/en/develop/documentation/oneapi-dpcpp-cpp-compiler-dev-guide-and-reference/top/compilation/ahead-of-time-compilation.html
-  # Right now public Intel driver don't support this option, because corresponding HW haven't released yet
-  SET (CYCLES_ONEAPI_AOT_TARGETS "dg2" CACHE STRING "oneAPI GPU architectures to build binaries for")
+  SET (CYCLES_ONEAPI_SPIR64_GEN_DEVICES "dg2" CACHE STRING "oneAPI Intel GPU architectures to build binaries for")
+  SET (CYCLES_ONEAPI_SYCL_TARGETS spir64 spir64_gen CACHE STRING "oneAPI targets to build AOT binaries for")
 
-  mark_as_advanced(CYCLES_ONEAPI_SYCL_TARGET)
   mark_as_advanced(WITH_CYCLES_ONEAPI_SYCL_HOST_ENABLED)
-  mark_as_advanced(CYCLES_ONEAPI_SYCL_TARGET)
-  mark_as_advanced(CYCLES_ONEAPI_AOT_TARGETS)
+  mark_as_advanced(CYCLES_ONEAPI_SPIR64_GEN_DEVICES)
+  mark_as_advanced(CYCLES_ONEAPI_SYCL_TARGETS)
 endif()
 
 # Draw Manager
diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt
index e00c3d93200..052a5656edd 100644
--- a/intern/cycles/kernel/CMakeLists.txt
+++ b/intern/cycles/kernel/CMakeLists.txt
@@ -717,6 +717,7 @@ if(WITH_CYCLES_DEVICE_ONEAPI)
     ${SRC_UTIL_HEADERS}
   )
 
+  # SYCL_CPP_FLAGS is a variable that the user can set to pass extra compiler options
   set(sycl_compiler_flags
       ${CMAKE_CURRENT_SOURCE_DIR}/${SRC_KERNEL_DEVICE_ONEAPI}
       -fsycl
@@ -727,11 +728,12 @@ if(WITH_CYCLES_DEVICE_ONEAPI)
       -ffast-math
       -DNDEBUG
       -O2
+      -mllvm -inlinedefault-threshold=400
       -o ${cycles_kernel_oneapi_lib}
       -I${CMAKE_CURRENT_SOURCE_DIR}/..
       -I${LEVEL_ZERO_INCLUDE_DIR}
       ${LEVEL_ZERO_LIBRARY}
-      ${ONEAPI_DPCPP_FLAGS}
+      ${SYCL_CPP_FLAGS}
       )
 
 
@@ -739,13 +741,26 @@ if(WITH_CYCLES_DEVICE_ONEAPI)
     list(APPEND sycl_compiler_flags -DWITH_ONEAPI_SYCL_HOST_ENABLED)
   endif()
 
-  set (CYCLES_ONEAPI_GPU_COMPILATION_OPTIONS "-internal_options '-ze-opt-large-register-file -ze-opt-regular-grf-kernel integrator_intersect'")
+  # Set defaults for spir64 and spir64_gen options
+  if (NOT DEFINED CYCLES_ONEAPI_SYCL_OPTIONS_spir64)
+    set(CYCLES_ONEAPI_SYCL_OPTIONS_spir64 "-internal_options '-ze-opt-large-register-file -ze-opt-regular-grf-kernel integrator_intersect'")
+  endif()
+  if (NOT DEFINED CYCLES_ONEAPI_SYCL_OPTIONS_spir64_gen)
+    SET (CYCLES_ONEAPI_SYCL_OPTIONS_spir64_gen "-device ${CYCLES_ONEAPI_SPIR64_GEN_DEVICES} ${CYCLES_ONEAPI_SYCL_OPTIONS_spir64}" CACHE STRING "Extra build options for spir64_gen target")
+  endif()
+
   if (WITH_CYCLES_ONEAPI_BINARIES)
-    list(APPEND sycl_compiler_flags
-      -fsycl-targets=spir64,spir64_gen
-      -Xsycl-target-backend=spir64 "${CYCLES_ONEAPI_GPU_COMPILATION_OPTIONS}"
-      -Xsycl-target-backend=spir64_gen "-device ${CYCLES_ONEAPI_AOT_TARGETS} --format zebin ${CYCLES_ONEAPI_GPU_COMPILATION_OPTIONS}")
+    # Iterate over all targest and their options
+    list (JOIN CYCLES_ONEAPI_SYCL_TARGETS "," targets_string)
+    list (APPEND sycl_compiler_flags -fsycl-targets=${targets_string})
+    foreach(target ${CYCLES_ONEAPI_SYCL_TARGETS})
+      if(DEFINED CYCLES_ONEAPI_SYCL_OPTIONS_${target})
+        list (APPEND sycl_compiler_flags -Xsycl-target-backend=${target} "${CYCLES_ONEAPI_SYCL_OPTIONS_${target}}")
+      endif()
+    endforeach()
   else()
+    # If AOT is disabled, build for spir64
+    set (CYCLES_ONEAPI_GPU_COMPILATION_OPTIONS "-internal_options '-ze-opt-large-register-file -ze-opt-regular-grf-kernel integrator_intersect'")
     list(APPEND sycl_compiler_flags
       -fsycl-targets=spir64
       -Xsycl-target-backend=spir64 "${CYCLES_ONEAPI_GPU_COMPILATION_OPTIONS}")



More information about the Bf-blender-cvs mailing list