diff options
author | Daya S Khudia <dskhudia@fb.com> | 2018-12-05 22:50:57 +0300 |
---|---|---|
committer | Facebook Github Bot <facebook-github-bot@users.noreply.github.com> | 2018-12-05 23:20:47 +0300 |
commit | 114a4612f374aaea96558581e24e321b19ca8cef (patch) | |
tree | 05215631108b1b7200ca56f453bcc6defcd8a983 /CMakeLists.txt | |
parent | 0d5a159b944252e70a677236b570f291943e0543 (diff) |
Move avx2 specific code in different source files (#28)
Summary:
Pull Request resolved: https://github.com/pytorch/FBGEMM/pull/28
Pull Request resolved: https://github.com/pytorch/pytorch/pull/14516
This is the first diff in a series of diffs that will separate out avx2 specific code in separate files. The goal is to compile as little as possible code with avx2 and avx512 compiler flags.
Reviewed By: jianyuh
Differential Revision: D13248376
fbshipit-source-id: 401c2e9d3cd96c420fd08c3efa011febce96ffbb
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 052b27c..2feb155 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,9 +22,10 @@ set(FBGEMM_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) set(FBGEMM_THIRDPARTY_DIR ${FBGEMM_BINARY_DIR}/third_party) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + #All the source files that either use avx2 instructions statically or JIT #avx2/avx512 instructions. -set(FBGEMM_AVX2_SRCS src/ExecuteKernel.cc +set(FBGEMM_GENERIC_SRCS src/ExecuteKernel.cc src/ExecuteKernelU8S8.cc src/Fbgemm.cc src/FbgemmFP16.cc @@ -62,6 +63,9 @@ else() message(WARNING "OpenMP is not supported by the compiler") endif() +#All the source files that either use avx2 instructions statically +set(FBGEMM_AVX2_SRCS src/Utils_avx2.cc) + #All the source files that use avx512 instructions statically set(FBGEMM_AVX512_SRCS src/Utils_avx512.cc) @@ -74,14 +78,17 @@ set(FBGEMM_PUBLIC_HEADERS include/fbgemm/Fbgemm.h include/fbgemm/FbgemmI8Spmdm.h) +add_library(fbgemm_generic OBJECT ${FBGEMM_GENERIC_SRCS}) add_library(fbgemm_avx2 OBJECT ${FBGEMM_AVX2_SRCS}) add_library(fbgemm_avx512 OBJECT ${FBGEMM_AVX512_SRCS}) -set_target_properties(fbgemm_avx2 fbgemm_avx512 PROPERTIES +set_target_properties(fbgemm_generic fbgemm_avx2 fbgemm_avx512 PROPERTIES CXX_STANDARD 11 CXX_EXTENSIONS NO CXX_VISIBILITY_PRESET hidden) +target_compile_options(fbgemm_generic PRIVATE + "-m64" "-mavx2" "-mfma" "-masm=intel") target_compile_options(fbgemm_avx2 PRIVATE "-m64" "-mavx2" "-mfma" "-masm=intel") target_compile_options(fbgemm_avx512 PRIVATE @@ -132,6 +139,12 @@ if(NOT TARGET cpuinfo) set_property(TARGET cpuinfo PROPERTY POSITION_INDEPENDENT_CODE ON) endif() +target_include_directories(fbgemm_generic BEFORE + PUBLIC $<BUILD_INTERFACE:${FBGEMM_SOURCE_DIR}> + PUBLIC $<BUILD_INTERFACE:${FBGEMM_SOURCE_DIR}/include> + PRIVATE "${ASMJIT_SRC_DIR}/src" + PRIVATE "${CPUINFO_SOURCE_DIR}/include") + target_include_directories(fbgemm_avx2 BEFORE PUBLIC $<BUILD_INTERFACE:${FBGEMM_SOURCE_DIR}> PUBLIC $<BUILD_INTERFACE:${FBGEMM_SOURCE_DIR}/include> @@ -145,17 +158,24 @@ target_include_directories(fbgemm_avx512 BEFORE PRIVATE "${CPUINFO_SOURCE_DIR}/include") if(FBGEMM_LIBRARY_TYPE STREQUAL "default") - add_library(fbgemm $<TARGET_OBJECTS:fbgemm_avx2> + add_library(fbgemm + $<TARGET_OBJECTS:fbgemm_generic> + $<TARGET_OBJECTS:fbgemm_avx2> $<TARGET_OBJECTS:fbgemm_avx512>) elseif(FBGEMM_LIBRARY_TYPE STREQUAL "shared") - add_library(fbgemm SHARED $<TARGET_OBJECTS:fbgemm_avx2> + add_library(fbgemm SHARED + $<TARGET_OBJECTS:fbgemm_generic> + $<TARGET_OBJECTS:fbgemm_avx2> $<TARGET_OBJECTS:fbgemm_avx512>) + set_property(TARGET fbgemm_generic PROPERTY POSITION_INDEPENDENT_CODE ON) set_property(TARGET fbgemm_avx2 PROPERTY POSITION_INDEPENDENT_CODE ON) set_property(TARGET fbgemm_avx512 PROPERTY POSITION_INDEPENDENT_CODE ON) set_target_properties(fbgemm PROPERTIES CXX_VISIBILITY_PRESET hidden) elseif(FBGEMM_LIBRARY_TYPE STREQUAL "static") - add_library(fbgemm STATIC $<TARGET_OBJECTS:fbgemm_avx2> + add_library(fbgemm STATIC + $<TARGET_OBJECTS:fbgemm_generic> + $<TARGET_OBJECTS:fbgemm_avx2> $<TARGET_OBJECTS:fbgemm_avx512>) target_compile_definitions(fbgemm_avx2 PRIVATE FBGEMM_STATIC) target_compile_definitions(fbgemm_avx512 PRIVATE FBGEMM_STATIC) |