Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marian-nmt/FBGEMM.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaya S Khudia <dskhudia@fb.com>2018-12-05 22:50:57 +0300
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>2018-12-05 23:20:47 +0300
commit114a4612f374aaea96558581e24e321b19ca8cef (patch)
tree05215631108b1b7200ca56f453bcc6defcd8a983 /CMakeLists.txt
parent0d5a159b944252e70a677236b570f291943e0543 (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.txt30
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)