@@ -68,111 +68,9 @@ option(LLAMA_OPENBLAS "llama: use OpenBLAS"
6868option (LLAMA_BUILD_TESTS "llama: build tests" ${LLAMA_STANDALONE} )
6969option (LLAMA_BUILD_EXAMPLES "llama: build examples" ${LLAMA_STANDALONE} )
7070
71- INCLUDE (CheckCSourceRuns)
72-
73- SET (AVX_CODE "
74- #include <immintrin.h>
75- int main()
76- {
77- __m256 a;
78- a = _mm256_set1_ps(0);
79- return 0;
80- }
81- " )
82-
83- SET (AVX512_CODE "
84- #include <immintrin.h>
85- int main()
86- {
87- __m512i a = _mm512_set_epi8(0, 0, 0, 0, 0, 0, 0, 0,
88- 0, 0, 0, 0, 0, 0, 0, 0,
89- 0, 0, 0, 0, 0, 0, 0, 0,
90- 0, 0, 0, 0, 0, 0, 0, 0,
91- 0, 0, 0, 0, 0, 0, 0, 0,
92- 0, 0, 0, 0, 0, 0, 0, 0,
93- 0, 0, 0, 0, 0, 0, 0, 0,
94- 0, 0, 0, 0, 0, 0, 0, 0);
95- __m512i b = a;
96- __mmask64 equality_mask = _mm512_cmp_epi8_mask(a, b, _MM_CMPINT_EQ);
97- return 0;
98- }
99- " )
100-
101- SET (AVX2_CODE "
102- #include <immintrin.h>
103- int main()
104- {
105- __m256i a = {0};
106- a = _mm256_abs_epi16(a);
107- __m256i x;
108- _mm256_extract_epi64(x, 0); // we rely on this in our AVX2 code
109- return 0;
110- }
111- " )
112-
113- SET (FMA_CODE "
114- #include <immintrin.h>
115- int main()
116- {
117- __m256 acc = _mm256_setzero_ps();
118- const __m256 d = _mm256_setzero_ps();
119- const __m256 p = _mm256_setzero_ps();
120- acc = _mm256_fmadd_ps( d, p, acc );
121- return 0;
122- }
123- " )
124-
125- MACRO (CHECK_SSE type flags )
126- SET (__FLAG_I 1)
127- SET (CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS} )
128- FOREACH (__FLAG ${flags} )
129- IF (NOT ${type} _FOUND)
130- SET (CMAKE_REQUIRED_FLAGS ${__FLAG} )
131- CHECK_C_SOURCE_RUNS("${${type} _CODE}" HAS_${type} _${__FLAG_I} )
132- IF (HAS_${type} _${__FLAG_I} )
133- SET (${type} _FOUND TRUE CACHE BOOL "${type} support" )
134- SET (${type} _FLAGS "${__FLAG} " CACHE STRING "${type} flags" )
135- ENDIF ()
136- MATH (EXPR __FLAG_I "${__FLAG_I} +1" )
137- ENDIF ()
138- ENDFOREACH ()
139- SET (CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE} )
140-
141- IF (NOT ${type} _FOUND)
142- SET (${type} _FOUND FALSE CACHE BOOL "${type} support" )
143- SET (${type} _FLAGS "" CACHE STRING "${type} flags" )
144- ENDIF ()
145-
146- MARK_AS_ADVANCED (${type} _FOUND ${type} _FLAGS)
147-
148- ENDMACRO ()
149-
150- IF (${LLAMA_AVX} )
151- CHECK_SSE("AVX" " ;-mavx;/arch:AVX" )
152- IF (NOT ${AVX_FOUND} )
153- set (LLAMA_AVX OFF )
154- ENDIF ()
155- ENDIF ()
156-
157- IF (${LLAMA_AVX2} )
158- CHECK_SSE("AVX2" " ;-mavx2 -mfma;/arch:AVX2" )
159- IF (NOT ${AVX2_FOUND} )
160- set (LLAMA_AVX2 OFF )
161- ENDIF ()
162- ENDIF ()
163-
164- IF (${LLAMA_AVX512} )
165- CHECK_SSE("AVX512" " ;-mavx512f -mavx512dq -mavx512vl -mavx512bw -mfma;/arch:AVX512" )
166- IF (NOT ${AVX512_FOUND} )
167- set (LLAMA_AVX512 OFF )
168- ENDIF ()
169- ENDIF ()
170-
171- IF (${LLAMA_FMA} )
172- CHECK_SSE("FMA" " ;-mfma;" )
173- IF (NOT ${FMA_FOUND} )
174- set (LLAMA_FMA OFF )
175- ENDIF ()
71+ MESSAGE ("NATIVE=" ${LLAMA_NATIVE} " MSVC=" ${MSVC} )
72+ IF (LLAMA_NATIVE AND MSVC )
73+ include (cmake/FindSIMD.cmake)
17674ENDIF ()
17775
17876#
0 commit comments