@@ -44,6 +44,8 @@ if (EXTERNAL_PACK)
4444 set ( BUILD_TESTING OFF )
4545endif ()
4646
47+ option ( USE_AVX512 "Use AVX-512 instruction set" OFF )
48+
4749set (EXTERNAL_OPTION "EXTERNAL_LIB" )
4850
4951# check what we're build. api just packs headers and build nothing
@@ -210,7 +212,10 @@ if ( FLAGS )
210212 target_compile_options ( columnar_root INTERFACE ${FLAGS} )
211213endif ()
212214
213- if ( USE_AVX2 )
215+ if ( USE_AVX512 )
216+ target_compile_definitions ( columnar_root INTERFACE USE_AVX512 )
217+ set ( lib_arch_suffix "_avx512" )
218+ elseif ( USE_AVX2 )
214219 target_compile_definitions ( columnar_root INTERFACE USE_AVX2 )
215220 set ( lib_arch_suffix "_avx2" )
216221endif ()
@@ -242,17 +247,27 @@ if ((INSTALL_COLUMNAR OR INSTALL_SECONDARY OR INSTALL_KNN ) AND AMD AND NOT USE_
242247endif ()
243248
244249if (ADD_AVX_BUILDS)
245- message ( STATUS "Will build extra libraries with AVX2 support" )
250+ message ( STATUS "Will build extra libraries with AVX2 and AVX-512 support" )
246251 include ( ExternalProject )
247- set ( EXTERNAL_PREFIX "${CMAKE_CURRENT_BINARY_DIR} /avx2" ) # here build artefacts located
252+ set ( EXTERNAL_PREFIX_AVX2 "${CMAKE_CURRENT_BINARY_DIR} /avx2" ) # here build artefacts located
248253 ExternalProject_Add ( columnar_avx2
249254 SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR} "
250255 PREFIX "${CMAKE_CURRENT_BINARY_DIR} /avx2"
251- CMAKE_ARGS -D${EXTERNAL_OPTION} =1 -DCMAKE_INSTALL_PREFIX=${EXTERNAL_PREFIX }
256+ CMAKE_ARGS -D${EXTERNAL_OPTION} =1 -DUSE_AVX2= ON - DCMAKE_INSTALL_PREFIX=${EXTERNAL_PREFIX_AVX2 }
252257 CONFIGURE_HANDLED_BY_BUILD TRUE
253258 TEST_COMMAND ""
254259 )
255- set ( EXTERNAL_MODULES "${EXTERNAL_PREFIX} /share/${REL_MODULES_DIR} " )
260+ set ( EXTERNAL_MODULES_AVX2 "${EXTERNAL_PREFIX_AVX2} /share/${REL_MODULES_DIR} " )
261+
262+ set ( EXTERNAL_PREFIX_AVX512 "${CMAKE_CURRENT_BINARY_DIR} /avx512" )
263+ ExternalProject_Add ( columnar_avx512
264+ SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR} "
265+ PREFIX "${CMAKE_CURRENT_BINARY_DIR} /avx512"
266+ CMAKE_ARGS -D${EXTERNAL_OPTION} =1 -DUSE_AVX512=ON -DCMAKE_INSTALL_PREFIX=${EXTERNAL_PREFIX_AVX512}
267+ CONFIGURE_HANDLED_BY_BUILD TRUE
268+ TEST_COMMAND ""
269+ )
270+ set ( EXTERNAL_MODULES_AVX512 "${EXTERNAL_PREFIX_AVX512} /share/${REL_MODULES_DIR} " )
256271endif ()
257272
258273if (INSTALL_COLUMNAR)
@@ -261,9 +276,14 @@ if (INSTALL_COLUMNAR)
261276 install ( FILES "$<TARGET_FILE_DIR :columnar_lib >/lib_manticore_columnar${lib_arch_suffix} .pdb" DESTINATION ${MODULES_DIR} COMPONENT dbgsymbols OPTIONAL )
262277 if (ADD_AVX_BUILDS)
263278 add_library ( columnar_lib_avx2 MODULE IMPORTED )
264- set_target_properties ( columnar_lib_avx2 PROPERTIES IMPORTED_LOCATION "${EXTERNAL_MODULES } /lib_manticore_columnar_avx2.${MODULE_EXT} " )
279+ set_target_properties ( columnar_lib_avx2 PROPERTIES IMPORTED_LOCATION "${EXTERNAL_MODULES_AVX2 } /lib_manticore_columnar_avx2.${MODULE_EXT} " )
265280 install ( IMPORTED_RUNTIME_ARTIFACTS columnar_lib_avx2 RUNTIME DESTINATION ${MODULES_DIR} LIBRARY DESTINATION ${MODULES_DIR} COMPONENT columnar )
266- install ( FILES "${EXTERNAL_MODULES} /lib_manticore_columnar_avx2.pdb" DESTINATION ${MODULES_DIR} COMPONENT dbgsymbols OPTIONAL )
281+ install ( FILES "${EXTERNAL_MODULES_AVX2} /lib_manticore_columnar_avx2.pdb" DESTINATION ${MODULES_DIR} COMPONENT dbgsymbols OPTIONAL )
282+
283+ add_library ( columnar_lib_avx512 MODULE IMPORTED )
284+ set_target_properties ( columnar_lib_avx512 PROPERTIES IMPORTED_LOCATION "${EXTERNAL_MODULES_AVX512} /lib_manticore_columnar_avx512.${MODULE_EXT} " )
285+ install ( IMPORTED_RUNTIME_ARTIFACTS columnar_lib_avx512 RUNTIME DESTINATION ${MODULES_DIR} LIBRARY DESTINATION ${MODULES_DIR} COMPONENT columnar )
286+ install ( FILES "${EXTERNAL_MODULES_AVX512} /lib_manticore_columnar_avx512.pdb" DESTINATION ${MODULES_DIR} COMPONENT dbgsymbols OPTIONAL )
267287 endif ()
268288endif ()
269289
@@ -273,9 +293,14 @@ if (INSTALL_SECONDARY)
273293 install ( FILES "$<TARGET_FILE_DIR :secondary_index >/lib_manticore_secondary${lib_arch_suffix} .pdb" DESTINATION ${MODULES_DIR} COMPONENT dbgsymbols OPTIONAL )
274294 if (ADD_AVX_BUILDS)
275295 add_library ( secondary_index_avx2 MODULE IMPORTED )
276- set_target_properties ( secondary_index_avx2 PROPERTIES IMPORTED_LOCATION "${EXTERNAL_MODULES } /lib_manticore_secondary_avx2.${MODULE_EXT} " )
296+ set_target_properties ( secondary_index_avx2 PROPERTIES IMPORTED_LOCATION "${EXTERNAL_MODULES_AVX2 } /lib_manticore_secondary_avx2.${MODULE_EXT} " )
277297 install ( IMPORTED_RUNTIME_ARTIFACTS secondary_index_avx2 RUNTIME DESTINATION ${MODULES_DIR} LIBRARY DESTINATION ${MODULES_DIR} COMPONENT secondary )
278- install ( FILES "${EXTERNAL_MODULES} /lib_manticore_secondary_avx2.pdb" DESTINATION ${MODULES_DIR} COMPONENT dbgsymbols OPTIONAL )
298+ install ( FILES "${EXTERNAL_MODULES_AVX2} /lib_manticore_secondary_avx2.pdb" DESTINATION ${MODULES_DIR} COMPONENT dbgsymbols OPTIONAL )
299+
300+ add_library ( secondary_index_avx512 MODULE IMPORTED )
301+ set_target_properties ( secondary_index_avx512 PROPERTIES IMPORTED_LOCATION "${EXTERNAL_MODULES_AVX512} /lib_manticore_secondary_avx512.${MODULE_EXT} " )
302+ install ( IMPORTED_RUNTIME_ARTIFACTS secondary_index_avx512 RUNTIME DESTINATION ${MODULES_DIR} LIBRARY DESTINATION ${MODULES_DIR} COMPONENT secondary )
303+ install ( FILES "${EXTERNAL_MODULES_AVX512} /lib_manticore_secondary_avx512.pdb" DESTINATION ${MODULES_DIR} COMPONENT dbgsymbols OPTIONAL )
279304 endif ()
280305endif ()
281306
@@ -286,9 +311,14 @@ if (INSTALL_KNN)
286311
287312 if (ADD_AVX_BUILDS)
288313 add_library ( knn_lib_avx2 MODULE IMPORTED )
289- set_target_properties ( knn_lib_avx2 PROPERTIES IMPORTED_LOCATION "${EXTERNAL_MODULES } /lib_manticore_knn_avx2.${MODULE_EXT} " )
314+ set_target_properties ( knn_lib_avx2 PROPERTIES IMPORTED_LOCATION "${EXTERNAL_MODULES_AVX2 } /lib_manticore_knn_avx2.${MODULE_EXT} " )
290315 install ( IMPORTED_RUNTIME_ARTIFACTS knn_lib_avx2 RUNTIME DESTINATION ${MODULES_DIR} LIBRARY DESTINATION ${MODULES_DIR} COMPONENT knn )
291- install ( FILES "${EXTERNAL_MODULES} /lib_manticore_knn_avx2.pdb" DESTINATION ${MODULES_DIR} COMPONENT dbgsymbols OPTIONAL )
316+ install ( FILES "${EXTERNAL_MODULES_AVX2} /lib_manticore_knn_avx2.pdb" DESTINATION ${MODULES_DIR} COMPONENT dbgsymbols OPTIONAL )
317+
318+ add_library ( knn_lib_avx512 MODULE IMPORTED )
319+ set_target_properties ( knn_lib_avx512 PROPERTIES IMPORTED_LOCATION "${EXTERNAL_MODULES_AVX512} /lib_manticore_knn_avx512.${MODULE_EXT} " )
320+ install ( IMPORTED_RUNTIME_ARTIFACTS knn_lib_avx512 RUNTIME DESTINATION ${MODULES_DIR} LIBRARY DESTINATION ${MODULES_DIR} COMPONENT knn )
321+ install ( FILES "${EXTERNAL_MODULES_AVX512} /lib_manticore_knn_avx512.pdb" DESTINATION ${MODULES_DIR} COMPONENT dbgsymbols OPTIONAL )
292322 endif ()
293323
294324 # Add component dependency - KNN depends on embeddings
0 commit comments