summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorKawrakow <48489457+ikawrakow@users.noreply.github.com>2024-07-27 07:55:01 +0200
committerGitHub <noreply@github.com>2024-07-27 07:55:01 +0200
commit154e0d75fccf1784fe9ff6fd76a630b66563da3d (patch)
tree81ce6dbb5b1900c1aa78a879f0593c694cab9d27 /cmake
parent0684c3e9c70d49323b4fc517128cbe222cab7f96 (diff)
Merge mainline llama.cpp (#3)
* Merging mainline - WIP * Merging mainline - WIP AVX2 and CUDA appear to work. CUDA performance seems slightly (~1-2%) lower as it is so often the case with llama.cpp/ggml after some "improvements" have been made. * Merging mainline - fix Metal * Remove check --------- Co-authored-by: Iwan Kawrakow <iwan.kawrakow@gmail.com>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/FindSIMD.cmake100
-rw-r--r--cmake/build-info.cmake58
-rw-r--r--cmake/git-vars.cmake22
-rw-r--r--cmake/llama-config.cmake.in90
4 files changed, 170 insertions, 100 deletions
diff --git a/cmake/FindSIMD.cmake b/cmake/FindSIMD.cmake
deleted file mode 100644
index 33377ec4..00000000
--- a/cmake/FindSIMD.cmake
+++ /dev/null
@@ -1,100 +0,0 @@
-include(CheckCSourceRuns)
-
-set(AVX_CODE "
- #include <immintrin.h>
- int main()
- {
- __m256 a;
- a = _mm256_set1_ps(0);
- return 0;
- }
-")
-
-set(AVX512_CODE "
- #include <immintrin.h>
- int main()
- {
- __m512i a = _mm512_set_epi8(0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0);
- __m512i b = a;
- __mmask64 equality_mask = _mm512_cmp_epi8_mask(a, b, _MM_CMPINT_EQ);
- return 0;
- }
-")
-
-set(AVX2_CODE "
- #include <immintrin.h>
- int main()
- {
- __m256i a = {0};
- a = _mm256_abs_epi16(a);
- __m256i x;
- _mm256_extract_epi64(x, 0); // we rely on this in our AVX2 code
- return 0;
- }
-")
-
-set(FMA_CODE "
- #include <immintrin.h>
- int main()
- {
- __m256 acc = _mm256_setzero_ps();
- const __m256 d = _mm256_setzero_ps();
- const __m256 p = _mm256_setzero_ps();
- acc = _mm256_fmadd_ps( d, p, acc );
- return 0;
- }
-")
-
-macro(check_sse type flags)
- set(__FLAG_I 1)
- set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
- foreach (__FLAG ${flags})
- if (NOT ${type}_FOUND)
- set(CMAKE_REQUIRED_FLAGS ${__FLAG})
- check_c_source_runs("${${type}_CODE}" HAS_${type}_${__FLAG_I})
- if (HAS_${type}_${__FLAG_I})
- set(${type}_FOUND TRUE CACHE BOOL "${type} support")
- set(${type}_FLAGS "${__FLAG}" CACHE STRING "${type} flags")
- endif()
- math(EXPR __FLAG_I "${__FLAG_I}+1")
- endif()
- endforeach()
- set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
-
- if (NOT ${type}_FOUND)
- set(${type}_FOUND FALSE CACHE BOOL "${type} support")
- set(${type}_FLAGS "" CACHE STRING "${type} flags")
- endif()
-
- mark_as_advanced(${type}_FOUND ${type}_FLAGS)
-endmacro()
-
-# flags are for MSVC only!
-check_sse("AVX" " ;/arch:AVX")
-if (NOT ${AVX_FOUND})
- set(LLAMA_AVX OFF)
-else()
- set(LLAMA_AVX ON)
-endif()
-
-check_sse("AVX2" " ;/arch:AVX2")
-check_sse("FMA" " ;/arch:AVX2")
-if ((NOT ${AVX2_FOUND}) OR (NOT ${FMA_FOUND}))
- set(LLAMA_AVX2 OFF)
-else()
- set(LLAMA_AVX2 ON)
-endif()
-
-check_sse("AVX512" " ;/arch:AVX512")
-if (NOT ${AVX512_FOUND})
- set(LLAMA_AVX512 OFF)
-else()
- set(LLAMA_AVX512 ON)
-endif()
diff --git a/cmake/build-info.cmake b/cmake/build-info.cmake
new file mode 100644
index 00000000..ea3dc55c
--- /dev/null
+++ b/cmake/build-info.cmake
@@ -0,0 +1,58 @@
+set(BUILD_NUMBER 0)
+set(BUILD_COMMIT "unknown")
+set(BUILD_COMPILER "unknown")
+set(BUILD_TARGET "unknown")
+
+# Look for git
+find_package(Git)
+if(NOT Git_FOUND)
+ find_program(GIT_EXECUTABLE NAMES git git.exe)
+ if(GIT_EXECUTABLE)
+ set(Git_FOUND TRUE)
+ message(STATUS "Found Git: ${GIT_EXECUTABLE}")
+ else()
+ message(WARNING "Git not found. Build info will not be accurate.")
+ endif()
+endif()
+
+# Get the commit count and hash
+if(Git_FOUND)
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ OUTPUT_VARIABLE HEAD
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ RESULT_VARIABLE RES
+ )
+ if (RES EQUAL 0)
+ set(BUILD_COMMIT ${HEAD})
+ endif()
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} rev-list --count HEAD
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ OUTPUT_VARIABLE COUNT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ RESULT_VARIABLE RES
+ )
+ if (RES EQUAL 0)
+ set(BUILD_NUMBER ${COUNT})
+ endif()
+endif()
+
+if(MSVC)
+ set(BUILD_COMPILER "${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}")
+ set(BUILD_TARGET ${CMAKE_VS_PLATFORM_NAME})
+else()
+ execute_process(
+ COMMAND sh -c "$@ --version | head -1" _ ${CMAKE_C_COMPILER}
+ OUTPUT_VARIABLE OUT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ set(BUILD_COMPILER ${OUT})
+ execute_process(
+ COMMAND ${CMAKE_C_COMPILER} -dumpmachine
+ OUTPUT_VARIABLE OUT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ set(BUILD_TARGET ${OUT})
+endif()
diff --git a/cmake/git-vars.cmake b/cmake/git-vars.cmake
new file mode 100644
index 00000000..1a4c24eb
--- /dev/null
+++ b/cmake/git-vars.cmake
@@ -0,0 +1,22 @@
+find_package(Git)
+
+# the commit's SHA1
+execute_process(COMMAND
+ "${GIT_EXECUTABLE}" describe --match=NeVeRmAtCh --always --abbrev=8
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ OUTPUT_VARIABLE GIT_SHA1
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+# the date of the commit
+execute_process(COMMAND
+ "${GIT_EXECUTABLE}" log -1 --format=%ad --date=local
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ OUTPUT_VARIABLE GIT_DATE
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+# the subject of the commit
+execute_process(COMMAND
+ "${GIT_EXECUTABLE}" log -1 --format=%s
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ OUTPUT_VARIABLE GIT_COMMIT_SUBJECT
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
diff --git a/cmake/llama-config.cmake.in b/cmake/llama-config.cmake.in
new file mode 100644
index 00000000..f072b76a
--- /dev/null
+++ b/cmake/llama-config.cmake.in
@@ -0,0 +1,90 @@
+set(LLAMA_VERSION @LLAMA_INSTALL_VERSION@)
+set(LLAMA_BUILD_COMMIT @LLAMA_BUILD_COMMIT@)
+set(LLAMA_BUILD_NUMBER @LLAMA_BUILD_NUMBER@)
+set(LLAMA_SHARED_LIB @BUILD_SHARED_LIBS@)
+
+set(GGML_BLAS @GGML_BLAS@)
+set(GGML_CUDA @GGML_CUDA@)
+set(GGML_METAL @GGML_METAL@)
+set(GGML_HIPBLAS @GGML_HIPBLAS@)
+set(GGML_ACCELERATE @GGML_ACCELERATE@)
+set(GGML_VULKAN @GGML_VULKAN@)
+set(GGML_VULKAN_CHECK_RESULTS @GGML_VULKAN_CHECK_RESULTS@)
+set(GGML_VULKAN_DEBUG @GGML_VULKAN_DEBUG@)
+set(GGML_VULKAN_MEMORY_DEBUG @GGML_VULKAN_MEMORY_DEBUG@)
+set(GGML_VULKAN_VALIDATE @GGML_VULKAN_VALIDATE@)
+set(GGML_SYCL @GGML_SYCL@)
+set(GGML_OPENMP @GGML_OPENMP@)
+
+@PACKAGE_INIT@
+
+set_and_check(LLAMA_INCLUDE_DIR "@PACKAGE_LLAMA_INCLUDE_INSTALL_DIR@")
+set_and_check(LLAMA_LIB_DIR "@PACKAGE_LLAMA_LIB_INSTALL_DIR@")
+set_and_check(LLAMA_BIN_DIR "@PACKAGE_LLAMA_BIN_INSTALL_DIR@")
+
+# Ensure transient dependencies satisfied
+
+find_package(Threads REQUIRED)
+
+if (APPLE AND GGML_ACCELERATE)
+ find_library(ACCELERATE_FRAMEWORK Accelerate REQUIRED)
+endif()
+
+if (GGML_BLAS)
+ find_package(BLAS REQUIRED)
+endif()
+
+if (GGML_CUDA)
+ find_package(CUDAToolkit REQUIRED)
+endif()
+
+if (GGML_METAL)
+ find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
+ find_library(METAL_FRAMEWORK Metal REQUIRED)
+ find_library(METALKIT_FRAMEWORK MetalKit REQUIRED)
+endif()
+
+if (GGML_VULKAN)
+ find_package(Vulkan REQUIRED)
+endif()
+
+if (GGML_HIPBLAS)
+ find_package(hip REQUIRED)
+ find_package(hipblas REQUIRED)
+ find_package(rocblas REQUIRED)
+endif()
+
+if (GGML_SYCL)
+ find_package(IntelSYCL REQUIRED)
+ find_package(MKL REQUIRED)
+endif()
+
+if (GGML_OPENMP)
+ find_package(OpenMP REQUIRED)
+endif()
+
+
+find_library(ggml_LIBRARY ggml
+ REQUIRED
+ HINTS ${LLAMA_LIB_DIR})
+
+find_library(llama_LIBRARY llama
+ REQUIRED
+ HINTS ${LLAMA_LIB_DIR})
+
+set(_llama_link_deps "${ggml_LIBRARY}" "@GGML_LINK_LIBRARIES@")
+set(_llama_transient_defines "@GGML_TRANSIENT_DEFINES@")
+
+add_library(llama UNKNOWN IMPORTED)
+
+set_target_properties(llama
+ PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${LLAMA_INCLUDE_DIR}"
+ INTERFACE_LINK_LIBRARIES "${_llama_link_deps}"
+ INTERFACE_COMPILE_DEFINITIONS "${_llama_transient_defines}"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+ IMPORTED_LOCATION "${llama_LIBRARY}"
+ INTERFACE_COMPILE_FEATURES cxx_std_11
+ POSITION_INDEPENDENT_CODE ON )
+
+check_required_components(Llama)