diff options
author | Marat Dukhan <maratek@google.com> | 2020-05-02 22:29:51 -0700 |
---|---|---|
committer | Marat Dukhan <maratek@google.com> | 2020-05-02 22:29:51 -0700 |
commit | 0672a7e1eb789b35709037ab5231d8d8a0f3bafc (patch) | |
tree | d9a414c39cece3e4eaa533ce8d438eb93ad26e1f /CMakeLists.txt | |
parent | 9b2c0caf7d9843f25709178b0cd7030892a1ff88 (diff) | |
download | pthreadpool-0672a7e1eb789b35709037ab5231d8d8a0f3bafc.tar.gz |
Fast path using atomic decrement instead of atomic compare-and-swap
50% higher throughput on x86 (disabled on other platforms)
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 51b0105..0db3264 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,11 @@ SET_PROPERTY(CACHE PTHREADPOOL_LIBRARY_TYPE PROPERTY STRINGS default static shar OPTION(PTHREADPOOL_ALLOW_DEPRECATED_API "Enable deprecated API functions" ON) SET(PTHREADPOOL_SYNC_PRIMITIVE "default" CACHE STRING "Synchronization primitive (condvar, futex, gcd, event, or default) for worker threads") SET_PROPERTY(CACHE PTHREADPOOL_SYNC_PRIMITIVE PROPERTY STRINGS default condvar futex gcd event) +IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?)$") + OPTION(PTHREADPOOL_ENABLE_FASTPATH "Enable fast path using atomic decrement instead of atomic compare-and-swap" ON) +ELSE() + OPTION(PTHREADPOOL_ENABLE_FASTPATH "Enable fast path using atomic decrement instead of atomic compare-and-swap" OFF) +ENDIF() IF("${CMAKE_SOURCE_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}") OPTION(PTHREADPOOL_BUILD_TESTS "Build pthreadpool unit tests" ON) OPTION(PTHREADPOOL_BUILD_BENCHMARKS "Build pthreadpool micro-benchmarks" ON) @@ -76,6 +81,9 @@ ELSE() ELSE() LIST(APPEND PTHREADPOOL_SRCS src/pthreads.c) ENDIF() + IF(PTHREADPOOL_ENABLE_FASTPATH) + LIST(APPEND PTHREADPOOL_SRCS src/fastpath.c) + ENDIF() ENDIF() ADD_LIBRARY(pthreadpool_interface INTERFACE) @@ -114,6 +122,11 @@ ELSEIF(PTHREADPOOL_SYNC_PRIMITIVE STREQUAL "event") ELSEIF(NOT PTHREADPOOL_SYNC_PRIMITIVE STREQUAL "default") MESSAGE(FATAL_ERROR "Unsupported synchronization primitive ${PTHREADPOOL_SYNC_PRIMITIVE}") ENDIF() +IF(PTHREADPOOL_ENABLE_FASTPATH) + TARGET_COMPILE_DEFINITIONS(pthreadpool PRIVATE PTHREADPOOL_ENABLE_FASTPATH=1) +ELSE() + TARGET_COMPILE_DEFINITIONS(pthreadpool PRIVATE PTHREADPOOL_ENABLE_FASTPATH=0) +ENDIF() SET_TARGET_PROPERTIES(pthreadpool PROPERTIES C_STANDARD 11 |