Spaces:
Running
Running
xctan
commited on
Commit
·
de5e986
1
Parent(s):
adf6b4b
ggml-cpu : rework weak alias on apple targets (llama/14146)
Browse files* ggml-cpu : rework weak alias on apple targets
* fix powerpc detection
* fix ppc detection
* fix powerpc detection on darwin
- ggml/cmake/common.cmake +1 -2
- ggml/src/ggml-cpu/ggml-cpu-impl.h +1 -1
- ggml/src/ggml-cpu/quants.c +4 -0
- ggml/src/ggml-cpu/quants.h +0 -27
- ggml/src/ggml-cpu/repack.cpp +4 -0
- ggml/src/ggml-cpu/repack.h +1 -17
ggml/cmake/common.cmake
CHANGED
|
@@ -36,8 +36,7 @@ function(ggml_get_system_arch)
|
|
| 36 |
(NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_GENERATOR_PLATFORM_LWR AND
|
| 37 |
CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|i686|AMD64|amd64)$"))
|
| 38 |
set(GGML_SYSTEM_ARCH "x86" PARENT_SCOPE)
|
| 39 |
-
elseif (
|
| 40 |
-
"${CMAKE_SYSTEM_PROCESSOR} " STREQUAL "powerpc ")
|
| 41 |
set(GGML_SYSTEM_ARCH "PowerPC" PARENT_SCOPE)
|
| 42 |
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "loongarch64")
|
| 43 |
set(GGML_SYSTEM_ARCH "loongarch64" PARENT_SCOPE)
|
|
|
|
| 36 |
(NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_GENERATOR_PLATFORM_LWR AND
|
| 37 |
CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|i686|AMD64|amd64)$"))
|
| 38 |
set(GGML_SYSTEM_ARCH "x86" PARENT_SCOPE)
|
| 39 |
+
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc|power")
|
|
|
|
| 40 |
set(GGML_SYSTEM_ARCH "PowerPC" PARENT_SCOPE)
|
| 41 |
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "loongarch64")
|
| 42 |
set(GGML_SYSTEM_ARCH "loongarch64" PARENT_SCOPE)
|
ggml/src/ggml-cpu/ggml-cpu-impl.h
CHANGED
|
@@ -509,7 +509,7 @@ void ggml_barrier(struct ggml_threadpool * tp);
|
|
| 509 |
|
| 510 |
#define GGML_DO_PRAGMA_(x) _Pragma (#x)
|
| 511 |
#define GGML_DO_PRAGMA(x) GGML_DO_PRAGMA_(x)
|
| 512 |
-
#if defined(GGML_CPU_GENERIC) || defined(__HIPCC__)
|
| 513 |
// Note for Apple targets:
|
| 514 |
// - clang: aliases are not supported on darwin
|
| 515 |
// - all native kernels need to be implemented in both x86 and arm files
|
|
|
|
| 509 |
|
| 510 |
#define GGML_DO_PRAGMA_(x) _Pragma (#x)
|
| 511 |
#define GGML_DO_PRAGMA(x) GGML_DO_PRAGMA_(x)
|
| 512 |
+
#if defined(GGML_CPU_GENERIC) || defined(__HIPCC__) || defined(__APPLE__)
|
| 513 |
// Note for Apple targets:
|
| 514 |
// - clang: aliases are not supported on darwin
|
| 515 |
// - all native kernels need to be implemented in both x86 and arm files
|
ggml/src/ggml-cpu/quants.c
CHANGED
|
@@ -5,6 +5,10 @@
|
|
| 5 |
#include "ggml-quants.h"
|
| 6 |
#include "quants.h"
|
| 7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
#include <string.h>
|
| 9 |
#include <assert.h>
|
| 10 |
#include <float.h>
|
|
|
|
| 5 |
#include "ggml-quants.h"
|
| 6 |
#include "quants.h"
|
| 7 |
|
| 8 |
+
#if defined(__APPLE__)
|
| 9 |
+
#include "apple-fallback.h"
|
| 10 |
+
#endif
|
| 11 |
+
|
| 12 |
#include <string.h>
|
| 13 |
#include <assert.h>
|
| 14 |
#include <float.h>
|
ggml/src/ggml-cpu/quants.h
CHANGED
|
@@ -84,33 +84,6 @@ void ggml_vec_dot_iq1_m_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs,
|
|
| 84 |
void ggml_vec_dot_iq4_nl_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
|
| 85 |
void ggml_vec_dot_iq4_xs_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
|
| 86 |
|
| 87 |
-
#if defined(GGML_CPU_GENERIC)
|
| 88 |
-
#define quantize_row_q8_0_generic quantize_row_q8_0
|
| 89 |
-
#define quantize_row_q8_1_generic quantize_row_q8_1
|
| 90 |
-
#define quantize_row_q8_K_generic quantize_row_q8_K
|
| 91 |
-
#define ggml_vec_dot_q4_0_q8_0_generic ggml_vec_dot_q4_0_q8_0
|
| 92 |
-
#define ggml_vec_dot_q4_1_q8_1_generic ggml_vec_dot_q4_1_q8_1
|
| 93 |
-
#define ggml_vec_dot_q5_0_q8_0_generic ggml_vec_dot_q5_0_q8_0
|
| 94 |
-
#define ggml_vec_dot_q5_1_q8_1_generic ggml_vec_dot_q5_1_q8_1
|
| 95 |
-
#define ggml_vec_dot_q8_0_q8_0_generic ggml_vec_dot_q8_0_q8_0
|
| 96 |
-
#define ggml_vec_dot_tq1_0_q8_K_generic ggml_vec_dot_tq1_0_q8_K
|
| 97 |
-
#define ggml_vec_dot_tq2_0_q8_K_generic ggml_vec_dot_tq2_0_q8_K
|
| 98 |
-
#define ggml_vec_dot_q2_K_q8_K_generic ggml_vec_dot_q2_K_q8_K
|
| 99 |
-
#define ggml_vec_dot_q3_K_q8_K_generic ggml_vec_dot_q3_K_q8_K
|
| 100 |
-
#define ggml_vec_dot_q4_K_q8_K_generic ggml_vec_dot_q4_K_q8_K
|
| 101 |
-
#define ggml_vec_dot_q5_K_q8_K_generic ggml_vec_dot_q5_K_q8_K
|
| 102 |
-
#define ggml_vec_dot_q6_K_q8_K_generic ggml_vec_dot_q6_K_q8_K
|
| 103 |
-
#define ggml_vec_dot_iq2_xxs_q8_K_generic ggml_vec_dot_iq2_xxs_q8_K
|
| 104 |
-
#define ggml_vec_dot_iq2_xs_q8_K_generic ggml_vec_dot_iq2_xs_q8_K
|
| 105 |
-
#define ggml_vec_dot_iq2_s_q8_K_generic ggml_vec_dot_iq2_s_q8_K
|
| 106 |
-
#define ggml_vec_dot_iq3_xxs_q8_K_generic ggml_vec_dot_iq3_xxs_q8_K
|
| 107 |
-
#define ggml_vec_dot_iq3_s_q8_K_generic ggml_vec_dot_iq3_s_q8_K
|
| 108 |
-
#define ggml_vec_dot_iq1_s_q8_K_generic ggml_vec_dot_iq1_s_q8_K
|
| 109 |
-
#define ggml_vec_dot_iq1_m_q8_K_generic ggml_vec_dot_iq1_m_q8_K
|
| 110 |
-
#define ggml_vec_dot_iq4_nl_q8_0_generic ggml_vec_dot_iq4_nl_q8_0
|
| 111 |
-
#define ggml_vec_dot_iq4_xs_q8_K_generic ggml_vec_dot_iq4_xs_q8_K
|
| 112 |
-
#endif
|
| 113 |
-
|
| 114 |
#ifdef __cplusplus
|
| 115 |
}
|
| 116 |
#endif
|
|
|
|
| 84 |
void ggml_vec_dot_iq4_nl_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
|
| 85 |
void ggml_vec_dot_iq4_xs_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
|
| 86 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
#ifdef __cplusplus
|
| 88 |
}
|
| 89 |
#endif
|
ggml/src/ggml-cpu/repack.cpp
CHANGED
|
@@ -8,6 +8,10 @@
|
|
| 8 |
#include "ggml-cpu-impl.h"
|
| 9 |
#include "traits.h"
|
| 10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
#include <cmath>
|
| 12 |
#include <cstring>
|
| 13 |
#include <cassert>
|
|
|
|
| 8 |
#include "ggml-cpu-impl.h"
|
| 9 |
#include "traits.h"
|
| 10 |
|
| 11 |
+
#if defined(__APPLE__)
|
| 12 |
+
#include "apple-fallback.h"
|
| 13 |
+
#endif
|
| 14 |
+
|
| 15 |
#include <cmath>
|
| 16 |
#include <cstring>
|
| 17 |
#include <cassert>
|
ggml/src/ggml-cpu/repack.h
CHANGED
|
@@ -67,7 +67,7 @@ extern "C" {
|
|
| 67 |
// Workaround for clang:
|
| 68 |
// clang++ complains: ``error: call to 'ggml_gemm_q4_0_4x4_q8_0' is ambiguous''
|
| 69 |
// repro: https://godbolt.org/z/oKdeWKonM (ICE), https://godbolt.org/z/1szq6P36v (ambiguous call)
|
| 70 |
-
#if defined(GGML_CPU_CLANG_WORKAROUND) || !(defined(__GNUC__) && defined(__clang__)) || defined(__HIPCC__)
|
| 71 |
void ggml_quantize_mat_q8_0_4x4(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k);
|
| 72 |
void ggml_quantize_mat_q8_0_4x8(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k);
|
| 73 |
void ggml_quantize_mat_q8_K_4x8(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k);
|
|
@@ -98,22 +98,6 @@ void ggml_gemm_q4_0_8x8_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs,
|
|
| 98 |
void ggml_gemm_q4_K_8x8_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc);
|
| 99 |
void ggml_gemm_iq4_nl_4x4_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc);
|
| 100 |
|
| 101 |
-
#if defined(GGML_CPU_GENERIC)
|
| 102 |
-
#define ggml_quantize_mat_q8_0_4x4_generic ggml_quantize_mat_q8_0_4x4
|
| 103 |
-
#define ggml_quantize_mat_q8_0_4x8_generic ggml_quantize_mat_q8_0_4x8
|
| 104 |
-
#define ggml_quantize_mat_q8_K_4x8_generic ggml_quantize_mat_q8_K_4x8
|
| 105 |
-
#define ggml_gemv_q4_0_4x4_q8_0_generic ggml_gemv_q4_0_4x4_q8_0
|
| 106 |
-
#define ggml_gemv_q4_0_4x8_q8_0_generic ggml_gemv_q4_0_4x8_q8_0
|
| 107 |
-
#define ggml_gemv_q4_0_8x8_q8_0_generic ggml_gemv_q4_0_8x8_q8_0
|
| 108 |
-
#define ggml_gemv_q4_K_8x8_q8_K_generic ggml_gemv_q4_K_8x8_q8_K
|
| 109 |
-
#define ggml_gemv_iq4_nl_4x4_q8_0_generic ggml_gemv_iq4_nl_4x4_q8_0
|
| 110 |
-
#define ggml_gemm_q4_0_4x4_q8_0_generic ggml_gemm_q4_0_4x4_q8_0
|
| 111 |
-
#define ggml_gemm_q4_0_4x8_q8_0_generic ggml_gemm_q4_0_4x8_q8_0
|
| 112 |
-
#define ggml_gemm_q4_0_8x8_q8_0_generic ggml_gemm_q4_0_8x8_q8_0
|
| 113 |
-
#define ggml_gemm_q4_K_8x8_q8_K_generic ggml_gemm_q4_K_8x8_q8_K
|
| 114 |
-
#define ggml_gemm_iq4_nl_4x4_q8_0_generic ggml_gemm_iq4_nl_4x4_q8_0
|
| 115 |
-
#endif
|
| 116 |
-
|
| 117 |
#if defined(__cplusplus)
|
| 118 |
} // extern "C"
|
| 119 |
#endif
|
|
|
|
| 67 |
// Workaround for clang:
|
| 68 |
// clang++ complains: ``error: call to 'ggml_gemm_q4_0_4x4_q8_0' is ambiguous''
|
| 69 |
// repro: https://godbolt.org/z/oKdeWKonM (ICE), https://godbolt.org/z/1szq6P36v (ambiguous call)
|
| 70 |
+
#if defined(GGML_CPU_CLANG_WORKAROUND) || defined(__APPLE__) || !(defined(__GNUC__) && defined(__clang__)) || defined(__HIPCC__)
|
| 71 |
void ggml_quantize_mat_q8_0_4x4(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k);
|
| 72 |
void ggml_quantize_mat_q8_0_4x8(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k);
|
| 73 |
void ggml_quantize_mat_q8_K_4x8(const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k);
|
|
|
|
| 98 |
void ggml_gemm_q4_K_8x8_q8_K_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc);
|
| 99 |
void ggml_gemm_iq4_nl_4x4_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc);
|
| 100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
#if defined(__cplusplus)
|
| 102 |
} // extern "C"
|
| 103 |
#endif
|