Skip to content

Commit 0714d7a

Browse files
committed
set AVX/AVX2 flags only for specific files
1 parent f5338a1 commit 0714d7a

File tree

1 file changed

+39
-32
lines changed

1 file changed

+39
-32
lines changed

CMakeLists.txt

Lines changed: 39 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,16 @@ ENDIF()
2525
######################################################################
2626

2727
IF(MSVC)
28-
# respect the standard
29-
ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE=1)
28+
# MSVC now supports C99 since VS2013/VS2015
29+
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /std:c99")
30+
ELSE(MSVC)
31+
# enable gnu99 and not c99 because we use
32+
# gnu extensions like posix_memalign
33+
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
34+
ENDIF(MSVC)
35+
36+
IF(MSVC)
37+
ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE=1) # respect the standard
3038
ENDIF(MSVC)
3139

3240
IF(UNIX)
@@ -118,18 +126,24 @@ ENDIF(NOT NO_GCC_EBX_FPIC_BUG)
118126

119127
FIND_PACKAGE(SSE) # checks SSE, AVX and AVX2
120128
IF(C_SSE2_FOUND)
129+
MESSAGE(STATUS "SSE2 Found")
121130
SET(CMAKE_C_FLAGS "${C_SSE2_FLAGS} -DUSE_SSE2 ${CMAKE_C_FLAGS}")
122131
ENDIF(C_SSE2_FOUND)
123132
IF(C_SSE3_FOUND)
133+
MESSAGE(STATUS "SSE3 Found")
124134
SET(CMAKE_C_FLAGS "${C_SSE3_FLAGS} -DUSE_SSE3 ${CMAKE_C_FLAGS}")
125135
ENDIF(C_SSE3_FOUND)
136+
# we dont set AVX and AVX2 flags globally, but only for specific files
126137
IF(C_AVX_FOUND)
127-
SET(CMAKE_C_FLAGS "${C_AVX_FLAGS} ${CMAKE_C_FLAGS}")
138+
MESSAGE(STATUS "AVX Found")
139+
# SET(CMAKE_C_FLAGS "${C_AVX_FLAGS} ${CMAKE_C_FLAGS}")
128140
ENDIF(C_AVX_FOUND)
129141
IF(C_AVX2_FOUND)
130-
SET(CMAKE_C_FLAGS "${C_AVX2_FLAGS} ${CMAKE_C_FLAGS}")
142+
MESSAGE(STATUS "AVX2 Found")
143+
# SET(CMAKE_C_FLAGS "${C_AVX2_FLAGS} ${CMAKE_C_FLAGS}")
131144
ENDIF(C_AVX2_FOUND)
132145

146+
133147
CHECK_C_SOURCE_RUNS("
134148
#include <stdatomic.h>
135149
int main()
@@ -176,45 +190,40 @@ ENDIF()
176190
##### sources section
177191
######################################################################
178192

193+
# IF ANY SIMD FOUND
179194
IF(C_AVX2_FOUND OR C_AVX_FOUND OR C_SSE4_2_FOUND OR C_SSE4_1_FOUND)
180195
SET(simd generic/simd/convolve.c)
181-
IF(MSVC)
182-
SET_SOURCE_FILES_PROPERTIES(generic/simd/convolve.c PROPERTIES COMPILE_FLAGS "/std:c99")
183-
ELSE(MSVC)
184-
SET_SOURCE_FILES_PROPERTIES(generic/simd/convolve.c PROPERTIES COMPILE_FLAGS "-std=c99")
185-
ENDIF(MSVC)
186196
ENDIF(C_AVX2_FOUND OR C_AVX_FOUND OR C_SSE4_2_FOUND OR C_SSE4_1_FOUND)
187197

188-
IF(C_SSE4_1_FOUND)
189-
SET(CMAKE_C_FLAGS "${C_SSE4_1_FLAGS} -DUSE_SSE4_1 ${CMAKE_C_FLAGS}")
190-
ENDIF(C_SSE4_1_FOUND)
191-
IF(C_SSE4_2_FOUND)
192-
SET(CMAKE_C_FLAGS "${C_SSE4_2_FLAGS} -DUSE_SSE4_2 ${CMAKE_C_FLAGS}")
193-
ENDIF(C_SSE4_2_FOUND)
194-
195-
IF(C_SSE4_1_FOUND OR C_SSE4_2_FOUND)
198+
# IF SSE4 FOUND
199+
IF(C_SSE4_1_FOUND AND C_SSE4_2_FOUND)
200+
SET(CMAKE_C_FLAGS "${C_SSE4_1_FLAGS} -DUSE_SSE4_1 ${C_SSE4_2_FLAGS} -DUSE_SSE4_2 ${CMAKE_C_FLAGS}")
196201
IF(MSVC)
197-
SET_SOURCE_FILES_PROPERTIES(generic/simd/convolve5x5_sse.c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast /std:c99")
202+
SET_SOURCE_FILES_PROPERTIES(generic/simd/convolve5x5_sse.c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast")
198203
ELSE(MSVC)
199-
SET_SOURCE_FILES_PROPERTIES(generic/simd/convolve5x5_sse.c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math -std=c99")
204+
SET_SOURCE_FILES_PROPERTIES(generic/simd/convolve5x5_sse.c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math")
200205
ENDIF(MSVC)
201206
SET(simd ${simd} generic/simd/convolve5x5_sse.c)
202-
ENDIF(C_SSE4_1_FOUND OR C_SSE4_2_FOUND)
207+
ENDIF(C_SSE4_1_FOUND AND C_SSE4_2_FOUND)
203208

204-
IF(MSVC)
205-
SET_SOURCE_FILES_PROPERTIES(generic/THTensorMath.c PROPERTIES COMPILE_FLAGS "/std:c99")
206-
ELSE(MSVC)
207-
SET_SOURCE_FILES_PROPERTIES(generic/THTensorMath.c PROPERTIES COMPILE_FLAGS "-std=c99")
208-
ENDIF(MSVC)
209+
# IF AVX FOUND
210+
IF(C_AVX_FOUND)
211+
IF(MSVC)
212+
SET_SOURCE_FILES_PROPERTIES(vector/AVX.c generic/simd/convolve5x5_avx.c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast ${C_AVX_FLAGS}")
213+
ELSE(MSVC)
214+
SET_SOURCE_FILES_PROPERTIES(vector/AVX.c generic/simd/convolve5x5_avx.c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math ${C_AVX_FLAGS}")
215+
ENDIF(MSVC)
216+
SET(simd ${simd} vector/AVX.c generic/simd/convolve5x5_avx.c)
217+
ENDIF(C_AVX_FOUND)
209218

210-
IF(C_AVX_FOUND OR C_AVX2_FOUND)
219+
IF(C_AVX2_FOUND)
211220
IF(MSVC)
212-
SET_SOURCE_FILES_PROPERTIES(generic/simd/convolve5x5_avx.c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast /arch:AVX /std:c99")
221+
SET_SOURCE_FILES_PROPERTIES(vector/AVX2.c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast ${C_AVX2_FLAGS}")
213222
ELSE(MSVC)
214-
SET_SOURCE_FILES_PROPERTIES(generic/simd/convolve5x5_avx.c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math -mavx -std=c99")
223+
SET_SOURCE_FILES_PROPERTIES(vector/AVX2.c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math ${C_AVX2_FLAGS}")
215224
ENDIF(MSVC)
216-
SET(simd ${simd} generic/simd/convolve5x5_avx.c)
217-
ENDIF(C_AVX_FOUND OR C_AVX2_FOUND)
225+
SET(simd ${simd} vector/AVX2.c)
226+
ENDIF(C_AVX2_FOUND)
218227

219228
SET(hdr
220229
THGeneral.h THHalf.h THAllocator.h THStorage.h THTensor.h THTensorApply.h THBlas.h THMath.h
@@ -224,8 +233,6 @@ SET(src
224233
THGeneral.c THHalf.c THAllocator.c THStorage.c THTensor.c THBlas.c THLapack.c
225234
THLogAdd.c THRandom.c THFile.c THDiskFile.c THMemoryFile.c THAtomic.c THVector.c)
226235

227-
SET(src ${src} vector/AVX.c vector/AVX2.c)
228-
229236
SET(src ${src} ${hdr} ${simd})
230237

231238
#######################################################################

0 commit comments

Comments
 (0)