Skip to content

Commit ac072d7

Browse files
committed
Modify per code review sugguestions
1 parent 7adce4f commit ac072d7

File tree

2 files changed

+102
-105
lines changed

2 files changed

+102
-105
lines changed

CMakeLists.txt

Lines changed: 3 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -109,111 +109,9 @@ else()
109109
message(WARNING "Git repository not found; to enable automatic generation of build info, make sure Git is installed and the project is a Git repository.")
110110
endif()
111111

112-
INCLUDE(CheckCSourceRuns)
113-
114-
SET(AVX_CODE "
115-
#include <immintrin.h>
116-
int main()
117-
{
118-
__m256 a;
119-
a = _mm256_set1_ps(0);
120-
return 0;
121-
}
122-
")
123-
124-
SET(AVX512_CODE "
125-
#include <immintrin.h>
126-
int main()
127-
{
128-
__m512i a = _mm512_set_epi8(0, 0, 0, 0, 0, 0, 0, 0,
129-
0, 0, 0, 0, 0, 0, 0, 0,
130-
0, 0, 0, 0, 0, 0, 0, 0,
131-
0, 0, 0, 0, 0, 0, 0, 0,
132-
0, 0, 0, 0, 0, 0, 0, 0,
133-
0, 0, 0, 0, 0, 0, 0, 0,
134-
0, 0, 0, 0, 0, 0, 0, 0,
135-
0, 0, 0, 0, 0, 0, 0, 0);
136-
__m512i b = a;
137-
__mmask64 equality_mask = _mm512_cmp_epi8_mask(a, b, _MM_CMPINT_EQ);
138-
return 0;
139-
}
140-
")
141-
142-
SET(AVX2_CODE "
143-
#include <immintrin.h>
144-
int main()
145-
{
146-
__m256i a = {0};
147-
a = _mm256_abs_epi16(a);
148-
__m256i x;
149-
_mm256_extract_epi64(x, 0); // we rely on this in our AVX2 code
150-
return 0;
151-
}
152-
")
153-
154-
SET(FMA_CODE "
155-
#include <immintrin.h>
156-
int main()
157-
{
158-
__m256 acc = _mm256_setzero_ps();
159-
const __m256 d = _mm256_setzero_ps();
160-
const __m256 p = _mm256_setzero_ps();
161-
acc = _mm256_fmadd_ps( d, p, acc );
162-
return 0;
163-
}
164-
")
165-
166-
MACRO(CHECK_SSE type flags)
167-
SET(__FLAG_I 1)
168-
SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
169-
FOREACH(__FLAG ${flags})
170-
IF(NOT ${type}_FOUND)
171-
SET(CMAKE_REQUIRED_FLAGS ${__FLAG})
172-
CHECK_C_SOURCE_RUNS("${${type}_CODE}" HAS_${type}_${__FLAG_I})
173-
IF(HAS_${type}_${__FLAG_I})
174-
SET(${type}_FOUND TRUE CACHE BOOL "${type} support")
175-
SET(${type}_FLAGS "${__FLAG}" CACHE STRING "${type} flags")
176-
ENDIF()
177-
MATH(EXPR __FLAG_I "${__FLAG_I}+1")
178-
ENDIF()
179-
ENDFOREACH()
180-
SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
181-
182-
IF(NOT ${type}_FOUND)
183-
SET(${type}_FOUND FALSE CACHE BOOL "${type} support")
184-
SET(${type}_FLAGS "" CACHE STRING "${type} flags")
185-
ENDIF()
186-
187-
MARK_AS_ADVANCED(${type}_FOUND ${type}_FLAGS)
188-
189-
ENDMACRO()
190-
191-
IF(${LLAMA_AVX})
192-
CHECK_SSE("AVX" " ;-mavx;/arch:AVX")
193-
IF(NOT ${AVX_FOUND})
194-
set(LLAMA_AVX OFF)
195-
ENDIF()
196-
ENDIF()
197-
198-
IF(${LLAMA_AVX2})
199-
CHECK_SSE("AVX2" " ;-mavx2 -mfma;/arch:AVX2")
200-
IF(NOT ${AVX2_FOUND})
201-
set(LLAMA_AVX2 OFF)
202-
ENDIF()
203-
ENDIF()
204-
205-
IF(${LLAMA_AVX512})
206-
CHECK_SSE("AVX512" " ;-mavx512f -mavx512dq -mavx512vl -mavx512bw -mfma;/arch:AVX512")
207-
IF(NOT ${AVX512_FOUND})
208-
set(LLAMA_AVX512 OFF)
209-
ENDIF()
210-
ENDIF()
211-
212-
IF(${LLAMA_FMA})
213-
CHECK_SSE("FMA" " ;-mfma;")
214-
IF (NOT ${FMA_FOUND})
215-
set(LLAMA_FMA OFF)
216-
ENDIF()
112+
MESSAGE("NATIVE=" ${LLAMA_NATIVE} " MSVC=" ${MSVC})
113+
IF(LLAMA_NATIVE AND MSVC)
114+
include(cmake/FindSIMD.cmake)
217115
ENDIF()
218116

219117
#

cmake/FindSIMD.cmake

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
INCLUDE(CheckCSourceRuns)
2+
3+
SET(AVX_CODE "
4+
#include <immintrin.h>
5+
int main()
6+
{
7+
__m256 a;
8+
a = _mm256_set1_ps(0);
9+
return 0;
10+
}
11+
")
12+
13+
SET(AVX512_CODE "
14+
#include <immintrin.h>
15+
int main()
16+
{
17+
__m512i a = _mm512_set_epi8(0, 0, 0, 0, 0, 0, 0, 0,
18+
0, 0, 0, 0, 0, 0, 0, 0,
19+
0, 0, 0, 0, 0, 0, 0, 0,
20+
0, 0, 0, 0, 0, 0, 0, 0,
21+
0, 0, 0, 0, 0, 0, 0, 0,
22+
0, 0, 0, 0, 0, 0, 0, 0,
23+
0, 0, 0, 0, 0, 0, 0, 0,
24+
0, 0, 0, 0, 0, 0, 0, 0);
25+
__m512i b = a;
26+
__mmask64 equality_mask = _mm512_cmp_epi8_mask(a, b, _MM_CMPINT_EQ);
27+
return 0;
28+
}
29+
")
30+
31+
SET(AVX2_CODE "
32+
#include <immintrin.h>
33+
int main()
34+
{
35+
__m256i a = {0};
36+
a = _mm256_abs_epi16(a);
37+
__m256i x;
38+
_mm256_extract_epi64(x, 0); // we rely on this in our AVX2 code
39+
return 0;
40+
}
41+
")
42+
43+
SET(FMA_CODE "
44+
#include <immintrin.h>
45+
int main()
46+
{
47+
__m256 acc = _mm256_setzero_ps();
48+
const __m256 d = _mm256_setzero_ps();
49+
const __m256 p = _mm256_setzero_ps();
50+
acc = _mm256_fmadd_ps( d, p, acc );
51+
return 0;
52+
}
53+
")
54+
55+
MACRO(CHECK_SSE type flags)
56+
SET(__FLAG_I 1)
57+
SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
58+
FOREACH(__FLAG ${flags})
59+
IF(NOT ${type}_FOUND)
60+
SET(CMAKE_REQUIRED_FLAGS ${__FLAG})
61+
CHECK_C_SOURCE_RUNS("${${type}_CODE}" HAS_${type}_${__FLAG_I})
62+
IF(HAS_${type}_${__FLAG_I})
63+
SET(${type}_FOUND TRUE CACHE BOOL "${type} support")
64+
SET(${type}_FLAGS "${__FLAG}" CACHE STRING "${type} flags")
65+
ENDIF()
66+
MATH(EXPR __FLAG_I "${__FLAG_I}+1")
67+
ENDIF()
68+
ENDFOREACH()
69+
SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
70+
71+
IF(NOT ${type}_FOUND)
72+
SET(${type}_FOUND FALSE CACHE BOOL "${type} support")
73+
SET(${type}_FLAGS "" CACHE STRING "${type} flags")
74+
ENDIF()
75+
76+
MARK_AS_ADVANCED(${type}_FOUND ${type}_FLAGS)
77+
78+
ENDMACRO()
79+
80+
CHECK_SSE("AVX" " ;/arch:AVX")
81+
IF(NOT ${AVX_FOUND})
82+
set(LLAMA_AVX OFF)
83+
ELSE()
84+
set(LLAMA_AVX ON)
85+
ENDIF()
86+
87+
CHECK_SSE("AVX2" " ;/arch:AVX2")
88+
IF(NOT ${AVX2_FOUND})
89+
set(LLAMA_AVX2 OFF)
90+
ELSE()
91+
set(LLAMA_AVX2 ON)
92+
ENDIF()
93+
94+
CHECK_SSE("AVX512" " ;/arch:AVX512")
95+
IF(NOT ${AVX512_FOUND})
96+
set(LLAMA_AVX512 OFF)
97+
ELSE()
98+
set(LLAMA_AVX512 ON)
99+
ENDIF()

0 commit comments

Comments
 (0)