Skip to content

Commit 8df7fb0

Browse files
committed
WIP: AVX10.1
1 parent d436cb3 commit 8df7fb0

3 files changed

Lines changed: 50 additions & 4 deletions

File tree

CMakeLists.txt

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -380,18 +380,21 @@ IF (EMBREE_MAX_ISA STREQUAL "NONE")
380380
OPTION(EMBREE_ISA_NEON2X "Enables NEON ISA double pumped." OFF)
381381
ENDIF()
382382
ELSE()
383-
TRY_COMPILE(COMPILER_SUPPORTS_AVX "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX})
384-
TRY_COMPILE(COMPILER_SUPPORTS_AVX2 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX2})
385-
TRY_COMPILE(COMPILER_SUPPORTS_AVX512 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX512})
383+
TRY_COMPILE(COMPILER_SUPPORTS_AVX "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX})
384+
TRY_COMPILE(COMPILER_SUPPORTS_AVX2 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX2})
385+
TRY_COMPILE(COMPILER_SUPPORTS_AVX512 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX512})
386+
TRY_COMPILE(COMPILER_SUPPORTS_AVX10_1 "${CMAKE_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/common/cmake/check_isa.cpp" COMPILE_DEFINITIONS ${FLAGS_AVX10_1})
386387

387388
OPTION(EMBREE_ISA_SSE2 "Enables SSE2 ISA." ON)
388389
OPTION(EMBREE_ISA_SSE42 "Enables SSE4.2 ISA." ON)
389390
OPTION(EMBREE_ISA_AVX "Enables AVX ISA." ${COMPILER_SUPPORTS_AVX})
390391
OPTION(EMBREE_ISA_AVX2 "Enables AVX2 ISA." ${COMPILER_SUPPORTS_AVX2})
391392
IF (APPLE)
392393
OPTION(EMBREE_ISA_AVX512 "Enables AVX512 ISA." OFF)
394+
OPTION(EMBREE_ISA_AVX10_1 "Enables AVX10.1 ISA." OFF)
393395
ELSE()
394396
OPTION(EMBREE_ISA_AVX512 "Enables AVX512 ISA." ${COMPILER_SUPPORTS_AVX512})
397+
OPTION(EMBREE_ISA_AVX10_1 "Enables AVX10.1 ISA." ${COMPILER_SUPPORTS_AVX10_1})
395398
ENDIF()
396399
# Don't use OPTION, but still set them to OFF, so that embree-config.cmake is consisten with its definitions
397400
SET(EMBREE_ISA_NEON OFF)
@@ -406,13 +409,15 @@ ELSEIF (EMBREE_MAX_ISA STREQUAL "DEFAULT")
406409
UNSET(EMBREE_ISA_AVX CACHE)
407410
UNSET(EMBREE_ISA_AVX2 CACHE)
408411
UNSET(EMBREE_ISA_AVX512 CACHE)
412+
UNSET(EMBREE_ISA_AVX10_1 CACHE)
409413
SET(EMBREE_ISA_NEON OFF)
410414
SET(EMBREE_ISA_NEON2X OFF)
411415
SET(EMBREE_ISA_SSE2 OFF)
412416
SET(EMBREE_ISA_SSE42 OFF)
413417
SET(EMBREE_ISA_AVX OFF)
414418
SET(EMBREE_ISA_AVX2 OFF)
415419
SET(EMBREE_ISA_AVX512 OFF)
420+
SET(EMBREE_ISA_AVX10_1 OFF)
416421
MESSAGE(STATUS "Detecting default ISA...")
417422
INCLUDE(check_isa_default)
418423
CHECK_ISA_DEFAULT(EMBREE_ISA_DEFAULT)
@@ -427,6 +432,7 @@ ELSE()
427432
UNSET(EMBREE_ISA_AVX CACHE)
428433
UNSET(EMBREE_ISA_AVX2 CACHE)
429434
UNSET(EMBREE_ISA_AVX512 CACHE)
435+
UNSET(EMBREE_ISA_AVX10_1 CACHE)
430436

431437
IF(EMBREE_MAX_ISA STREQUAL "NEON")
432438
SET(ISA 1)
@@ -444,6 +450,8 @@ ELSE()
444450
SET(ISA 5)
445451
ELSEIF(EMBREE_MAX_ISA STREQUAL "AVX512SKX") # just for compatibility
446452
SET(ISA 5)
453+
ELSEIF(EMBREE_MAX_ISA STREQUAL "AVX10.1")
454+
SET(ISA 6)
447455
ELSE()
448456
MESSAGE(FATAL_ERROR "Unsupported ISA specified: " ${EMBREE_MAX_ISA})
449457
ENDIF()
@@ -455,6 +463,7 @@ ELSE()
455463
SET(EMBREE_ISA_AVX OFF)
456464
SET(EMBREE_ISA_AVX2 OFF)
457465
SET(EMBREE_ISA_AVX512 OFF)
466+
SET(EMBREE_ISA_AVX10_1 OFF)
458467

459468
IF (EMBREE_ARM)
460469
IF (ISA GREATER 0)
@@ -479,6 +488,9 @@ ELSE()
479488
IF (ISA GREATER 4)
480489
SET(EMBREE_ISA_AVX512 ON)
481490
ENDIF ()
491+
IF (ISA GREATER 5)
492+
SET(EMBREE_ISA_AVX10_1 ON)
493+
ENDIF ()
482494
ENDIF()
483495
ENDIF()
484496

@@ -511,6 +523,9 @@ IF (APPLE AND EMBREE_STATIC_LIB)
511523
IF (EMBREE_ISA_AVX512)
512524
MATH(EXPR NUMISA "${NUMISA}+1")
513525
ENDIF()
526+
IF (EMBREE_ISA_AVX10_1)
527+
MATH(EXPR NUMISA "${NUMISA}+1")
528+
ENDIF()
514529

515530
IF (NUMISA GREATER 1)
516531
IF (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
@@ -530,6 +545,7 @@ SET(SSE42 1)
530545
SET(AVX 2)
531546
SET(AVX2 3)
532547
SET(AVX512 4)
548+
SET(AVX10_1 5)
533549

534550
UNSET(FLAGS_LOWEST)
535551
SET(ISA_LOWEST -1)
@@ -612,6 +628,19 @@ IF (EMBREE_ISA_AVX512)
612628
ENDIF()
613629
ENDIF ()
614630

631+
IF (EMBREE_ISA_AVX10_1)
632+
ADD_DEFINITIONS(-DEMBREE_TARGET_AVX10_1)
633+
IF (NOT EMBREE_ARM)
634+
# AVX 10.1 support in ISPC?
635+
# LIST(APPEND ISPC_TARGETS "")
636+
ENDIF()
637+
IF(NOT FLAGS_LOWEST)
638+
SET(ISA_LOWEST ${AVX10_1})
639+
SET(ISA_LOWEST_AVX ${AVX10_1})
640+
SET(FLAGS_LOWEST ${FLAGS_AVX10_1})
641+
ENDIF()
642+
ENDIF ()
643+
615644
IF (ISA_LOWEST EQUAL -1)
616645
MESSAGE(FATAL_ERROR "You have to enable at least one ISA!")
617646
ENDIF()

common/cmake/msvc.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ SET(FLAGS_SSE42 "${FLAGS_SSE2} /D__SSE3__ /D__SSSE3__ /D__SSE4_1__ /D__SSE4_2__"
66
SET(FLAGS_AVX "${FLAGS_SSE42} /arch:AVX")
77
SET(FLAGS_AVX2 "${FLAGS_SSE42} /arch:AVX2")
88
SET(FLAGS_AVX512 "${FLAGS_AVX2} /arch:AVX512")
9+
SET(FLAGS_AVX10_1 "${FLAGS_AVX2} /arch:AVX10.1")
910

1011
SET(COMMON_CXX_FLAGS "")
1112
SET(COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} /EHsc") # catch C++ exceptions only and extern "C" functions never throw a C++ exception

kernels/CMakeLists.txt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ MACRO(embree_files TARGET ISA)
132132
LIST(APPEND ${TARGET} geometry/primitive8.cpp)
133133
ENDIF()
134134

135-
IF (${ISA} EQUAL ${SSE2} OR ${ISA} EQUAL ${AVX} OR ${ISA} EQUAL ${AVX2} OR ${ISA} EQUAL ${AVX512} OR ${ISA_LOWEST} EQUAL ${ISA})
135+
IF (${ISA} EQUAL ${SSE2} OR ${ISA} EQUAL ${AVX} OR ${ISA} EQUAL ${AVX2} OR ${ISA} EQUAL ${AVX512} OR ${ISA} EQUAL ${AVX10_1} OR ${ISA_LOWEST} EQUAL ${ISA})
136136

137137
LIST(APPEND ${TARGET}
138138
common/scene_user_geometry.cpp
@@ -209,6 +209,7 @@ embree_files(EMBREE_LIBRARY_FILES_SSE42 ${SSE42})
209209
embree_files(EMBREE_LIBRARY_FILES_AVX ${AVX})
210210
embree_files(EMBREE_LIBRARY_FILES_AVX2 ${AVX2})
211211
embree_files(EMBREE_LIBRARY_FILES_AVX512 ${AVX512})
212+
embree_files(EMBREE_LIBRARY_FILES_AVX10_1 ${AVX10_1})
212213

213214
#message("SSE2: ${EMBREE_LIBRARY_FILES_SSE2}")
214215
#message("SSE42: ${EMBREE_LIBRARY_FILES_SSE42}")
@@ -237,6 +238,7 @@ CreateISADummyFiles(EMBREE_LIBRARY_FILES_SSE42 sse42 ${EMBREE_LIBRARY_FI
237238
CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX avx ${EMBREE_LIBRARY_FILES_AVX})
238239
CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX2 avx2 ${EMBREE_LIBRARY_FILES_AVX2})
239240
CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX512 avx512 ${EMBREE_LIBRARY_FILES_AVX512})
241+
CreateISADummyFiles(EMBREE_LIBRARY_FILES_AVX10_1 avx10_1 ${EMBREE_LIBRARY_FILES_AVX10_1})
240242

241243
MACRO (CheckGlobals library)
242244
IF (NOT WIN32 AND NOT APPLE)
@@ -346,6 +348,20 @@ IF (EMBREE_ISA_AVX512 AND EMBREE_LIBRARY_FILES_AVX512)
346348
ENDIF()
347349
ENDIF()
348350

351+
IF (EMBREE_ISA_AVX10_1 AND EMBREE_LIBRARY_FILES_AVX10_1)
352+
DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES_AVX10_1})
353+
ADD_LIBRARY(embree_avx10_1 STATIC ${EMBREE_LIBRARY_FILES_AVX10_1})
354+
TARGET_LINK_LIBRARIES(embree_avx10_1 PRIVATE tasking)
355+
SET_TARGET_PROPERTIES(embree_avx10_1 PROPERTIES COMPILE_FLAGS "${FLAGS_AVX10_1}")
356+
SET_PROPERTY(TARGET embree_avx10_1 PROPERTY FOLDER kernels)
357+
SET(EMBREE_LIBRARIES ${EMBREE_LIBRARIES} embree_avx10_1)
358+
CheckGlobals(embree_avx10_1)
359+
IF (EMBREE_STATIC_LIB)
360+
INSTALL(TARGETS embree_avx10_1 EXPORT embree_avx10_1-targets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel)
361+
INSTALL(EXPORT embree_avx10_1-targets DESTINATION "${EMBREE_CMAKEEXPORT_DIR}" COMPONENT devel)
362+
ENDIF()
363+
ENDIF()
364+
349365
TARGET_LINK_LIBRARIES(embree PRIVATE ${EMBREE_LIBRARIES} sys math simd lexers tasking)
350366
IF (EMBREE_SYCL_SUPPORT)
351367
TARGET_LINK_LIBRARIES(embree PRIVATE ${SYCL_LIB_NAME} ze_wrapper PUBLIC embree_sycl)

0 commit comments

Comments
 (0)