aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorMarat Dukhan <maratek@google.com>2020-05-02 22:29:51 -0700
committerMarat Dukhan <maratek@google.com>2020-05-02 22:29:51 -0700
commit0672a7e1eb789b35709037ab5231d8d8a0f3bafc (patch)
treed9a414c39cece3e4eaa533ce8d438eb93ad26e1f /CMakeLists.txt
parent9b2c0caf7d9843f25709178b0cd7030892a1ff88 (diff)
downloadpthreadpool-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.txt13
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