char-fork/llama.cpp

git clone https://git.t4t.associates/char-fork/llama.cpp

Max Krasnyanskyhexagon: support for multi-device model split (aka row-split) (#28589)eafe15a5e

char/aliceai-t5-moe
1.9 KiB89 linesraw
1#ifndef HEX_COMMON_H
2#define HEX_COMMON_H
3
4#include <stdint.h>
5#include <stddef.h>
6#include <stdbool.h>
7
8#ifndef SIZE_MAX
9#define SIZE_MAX ((size_t)-1)
10#endif
11
12#ifndef MAX
13#define MAX(a, b) ((a) > (b) ? (a) : (b))
14#endif
15
16#ifndef MIN
17#define MIN(a, b) ((a) < (b) ? (a) : (b))
18#endif
19
20static inline uint32_t hex_ceil_pow2(uint32_t x) {
21    if (x <= 1) { return 1; }
22    int p = 2;
23    x--;
24    while (x >>= 1) { p <<= 1; }
25    return p;
26}
27
28static inline size_t hmx_ceil_div(size_t num, size_t den) {
29    return (num + den - 1) / den;
30}
31
32static inline int32_t hex_is_aligned(const void * addr, uint32_t align) {
33    return ((size_t) addr & (align - 1)) == 0;
34}
35
36static inline size_t hex_align_up(size_t v, size_t align) {
37    return hmx_ceil_div(v, align) * align;
38}
39
40static inline size_t hex_align_down(size_t v, size_t align) {
41    return (v / align) * align;
42}
43
44static inline int32_t hex_is_one_chunk(void * addr, uint32_t n, uint32_t chunk_size) {
45    uint32_t left_off  = (size_t) addr & (chunk_size - 1);
46    uint32_t right_off = left_off + n;
47    return right_off <= chunk_size;
48}
49
50static inline uint32_t hex_round_up(uint32_t n, uint32_t m) {
51    return m * ((n + m - 1) / m);
52}
53
54static inline size_t hex_smin(size_t a, size_t b) {
55    return a < b ? a : b;
56}
57
58static inline size_t hex_smax(size_t a, size_t b) {
59    return a > b ? a : b;
60}
61
62static inline void hex_swap_ptr(void ** p1, void ** p2) {
63    void * t = *p1;
64    *p1      = *p2;
65    *p2      = t;
66}
67
68static inline bool hex_mul_overflow(size_t a, size_t b, size_t *out) {
69    if (a != 0 && b > SIZE_MAX / a) return true;
70    *out = a * b;
71    return false;
72}
73
74static inline bool hex_add_overflow(size_t a, size_t b, size_t *out) {
75    if (a > SIZE_MAX - b) return true;
76    *out = a + b;
77    return false;
78}
79
80static inline uint32_t hex_gcd_u32(uint32_t a, uint32_t b) {
81    while (b != 0) {
82        uint32_t t = b;
83        b = a % b;
84        a = t;
85    }
86    return a;
87}
88
89#endif // HEX_COMMON_H