Skip to content

Commit a961c6f

Browse files
Move conversion functions to common header
Add ggml_ prefix to their names.
1 parent 4171300 commit a961c6f

File tree

3 files changed

+102
-103
lines changed

3 files changed

+102
-103
lines changed

ggml/src/ggml-impl.h

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@
2828
#include <immintrin.h>
2929
#endif
3030

31+
#if defined(__gnu_linux__)
32+
#include <endian.h>
33+
#else // defined(__gnu_linux__)
34+
#define le64toh(x) (x)
35+
#define le32toh(x) (x)
36+
#define le16toh(x) (x)
37+
#endif // defined(__gnu_linux__)
38+
3139
#ifdef __cplusplus
3240
extern "C" {
3341
#endif
@@ -553,13 +561,70 @@ static inline ggml_bf16_t ggml_compute_fp32_to_bf16(float s) {
553561
#define GGML_FP32_TO_BF16(x) ggml_compute_fp32_to_bf16(x)
554562
#define GGML_BF16_TO_FP32(x) ggml_compute_bf16_to_fp32(x)
555563

564+
// endianness conversion
565+
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
566+
#define ggml_convert_from_le16(x) GGML_UNUSED(x)
567+
#define ggml_convert_from_le32(x) GGML_UNUSED(x)
568+
#define ggml_convert_from_le64(x) GGML_UNUSED(x)
569+
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
570+
static inline void ggml_convert_from_le16(void * value) {
571+
*((uint16_t*)value) = le16toh(*((uint16_t*)value));
572+
}
573+
574+
static inline void ggml_convert_from_le32(void * value) {
575+
*((uint32_t*)value) = le32toh(*((uint32_t*)value));
576+
}
577+
578+
static inline void ggml_convert_from_le64(void * value) {
579+
*((uint64_t*)value) = le64toh(*((uint64_t*)value));
580+
}
581+
#else // __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
582+
#error Unexpected or undefined __BYTE_ORDER__
583+
#endif // __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
584+
585+
#define ggml_convert_to_le16(x) ggml_convert_from_le16(x)
586+
#define ggml_convert_to_le32(x) ggml_convert_from_le32(x)
587+
#define ggml_convert_to_le64(x) ggml_convert_from_le64(x)
588+
556589
#ifdef __cplusplus
557590
}
558591
#endif
559592

560593
#ifdef __cplusplus
561594
#include <vector>
562595

596+
// endianness conversion
597+
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
598+
#define ggml_convert_from_le(x) GGML_UNUSED(x)
599+
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
600+
#include <type_traits>
601+
602+
template <typename T, std::enable_if_t<sizeof(T) == 1, int> = 0>
603+
static inline void ggml_convert_from_le(T * value)
604+
{
605+
GGML_UNUSED(value);
606+
}
607+
608+
template <typename T, std::enable_if_t<sizeof(T) == 2, int> = 0>
609+
static inline void ggml_convert_from_le(T * value) {
610+
ggml_convert_from_le16(value);
611+
}
612+
613+
template <typename T, std::enable_if_t<sizeof(T) == 4, int> = 0>
614+
static inline void ggml_convert_from_le(T * value) {
615+
ggml_convert_from_le32(value);
616+
}
617+
618+
template <typename T, std::enable_if_t<sizeof(T) == 8, int> = 0>
619+
static inline void ggml_convert_from_le(T * value) {
620+
ggml_convert_from_le64(value);
621+
}
622+
#else // __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
623+
#error Unexpected or undefined __BYTE_ORDER__
624+
#endif // __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
625+
626+
#define ggml_convert_to_le(x) ggml_convert_from_le(x)
627+
563628
// expose GGUF internals for test code
564629
GGML_API size_t gguf_type_size(enum gguf_type type);
565630
GGML_API struct gguf_context * gguf_init_from_file_impl(FILE * file, struct gguf_init_params params);

ggml/src/ggml.c

Lines changed: 36 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -36,35 +36,6 @@
3636
#include <syscall.h>
3737
#endif
3838

39-
#if defined(__gnu_linux__)
40-
#include <endian.h>
41-
#else
42-
#define le64toh(x) (x)
43-
#define le32toh(x) (x)
44-
#define le16toh(x) (x)
45-
#endif
46-
47-
// endianness conversion
48-
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
49-
#define convert_from_le16(x) UNUSED(x)
50-
#define convert_from_le32(x) UNUSED(x)
51-
#define convert_from_le64(x) UNUSED(x)
52-
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
53-
static inline void convert_from_le16(void * value) {
54-
*((uint16_t*)value) = le16toh(*((uint16_t*)value));
55-
}
56-
57-
static inline void convert_from_le32(void * value) {
58-
*((uint32_t*)value) = le32toh(*((uint32_t*)value));
59-
}
60-
61-
static inline void convert_from_le64(void * value) {
62-
*((uint64_t*)value) = le64toh(*((uint64_t*)value));
63-
}
64-
#else
65-
#error Unexpected or undefined __BYTE_ORDER__
66-
#endif
67-
6839
#if defined(__APPLE__)
6940
#include <unistd.h>
7041
#include <mach/mach.h>
@@ -6593,179 +6564,179 @@ bool ggml_threadpool_params_match(const struct ggml_threadpool_params * p0, cons
65936564
static void ggml_byteswap_i16(void * restrict buffer, size_t elements) {
65946565
uint16_t *data_ptr = (uint16_t*) buffer;
65956566
for (size_t i = 0; i < elements; ++i) {
6596-
convert_from_le16(data_ptr + i);
6567+
ggml_convert_from_le16(data_ptr + i);
65976568
}
65986569
}
65996570

66006571
static void ggml_byteswap_i32(void * restrict buffer, size_t elements) {
66016572
uint32_t *data_ptr = (uint32_t*) buffer;
66026573
for (size_t i = 0; i < elements; ++i) {
6603-
convert_from_le32(data_ptr + i);
6574+
ggml_convert_from_le32(data_ptr + i);
66046575
}
66056576
}
66066577

66076578
static void ggml_byteswap_i64(void * restrict buffer, size_t elements) {
66086579
uint64_t *data_ptr = (uint64_t*) buffer;
66096580
for (size_t i = 0; i < elements; ++i) {
6610-
convert_from_le64(data_ptr + i);
6581+
ggml_convert_from_le64(data_ptr + i);
66116582
}
66126583
}
66136584

66146585
static void ggml_byteswap_q4_0(void * restrict buffer, size_t elements) {
66156586
block_q4_0 *data_ptr = (block_q4_0*) buffer;
66166587
for (size_t i = 0; i < elements; ++i) {
6617-
convert_from_le16(&(data_ptr[i].d));
6588+
ggml_convert_from_le16(&(data_ptr[i].d));
66186589
}
66196590
}
66206591

66216592
static void ggml_byteswap_q4_1(void * restrict buffer, size_t elements) {
66226593
block_q4_1 *data_ptr = (block_q4_1*) buffer;
66236594
for (size_t i = 0; i < elements; ++i) {
6624-
convert_from_le16(&(data_ptr[i].d));
6625-
convert_from_le16(&(data_ptr[i].m));
6595+
ggml_convert_from_le16(&(data_ptr[i].d));
6596+
ggml_convert_from_le16(&(data_ptr[i].m));
66266597
}
66276598
}
66286599

66296600
static void ggml_byteswap_q5_0(void * restrict buffer, size_t elements) {
66306601
block_q5_0 *data_ptr = (block_q5_0*) buffer;
66316602
for (size_t i = 0; i < elements; ++i) {
6632-
convert_from_le16(&(data_ptr[i].d));
6603+
ggml_convert_from_le16(&(data_ptr[i].d));
66336604
}
66346605
}
66356606

66366607
static void ggml_byteswap_q5_1(void * restrict buffer, size_t elements) {
66376608
block_q5_1 *data_ptr = (block_q5_1*) buffer;
66386609
for (size_t i = 0; i < elements; ++i) {
6639-
convert_from_le16(&(data_ptr[i].d));
6640-
convert_from_le16(&(data_ptr[i].m));
6610+
ggml_convert_from_le16(&(data_ptr[i].d));
6611+
ggml_convert_from_le16(&(data_ptr[i].m));
66416612
}
66426613
}
66436614

66446615
static void ggml_byteswap_q8_0(void * restrict buffer, size_t elements) {
66456616
block_q8_0 *data_ptr = (block_q8_0*) buffer;
66466617
for (size_t i = 0; i < elements; ++i) {
6647-
convert_from_le16(&(data_ptr[i].d));
6618+
ggml_convert_from_le16(&(data_ptr[i].d));
66486619
}
66496620
}
66506621

66516622
static void ggml_byteswap_q8_1(void * restrict buffer, size_t elements) {
66526623
block_q8_1 *data_ptr = (block_q8_1*) buffer;
66536624
for (size_t i = 0; i < elements; ++i) {
6654-
convert_from_le16(&(data_ptr[i].d));
6655-
convert_from_le16(&(data_ptr[i].s));
6625+
ggml_convert_from_le16(&(data_ptr[i].d));
6626+
ggml_convert_from_le16(&(data_ptr[i].s));
66566627
}
66576628
}
66586629

66596630
static void ggml_byteswap_q2_k(void * restrict buffer, size_t elements) {
66606631
block_q2_K *data_ptr = (block_q2_K*) buffer;
66616632
for (size_t i = 0; i < elements; ++i) {
6662-
convert_from_le16(&(data_ptr[i].d));
6663-
convert_from_le16(&(data_ptr[i].dmin));
6633+
ggml_convert_from_le16(&(data_ptr[i].d));
6634+
ggml_convert_from_le16(&(data_ptr[i].dmin));
66646635
}
66656636
}
66666637

66676638
static void ggml_byteswap_q3_k(void * restrict buffer, size_t elements) {
66686639
block_q3_K *data_ptr = (block_q3_K*) buffer;
66696640
for (size_t i = 0; i < elements; ++i) {
6670-
convert_from_le16(&(data_ptr[i].d));
6641+
ggml_convert_from_le16(&(data_ptr[i].d));
66716642
}
66726643
}
66736644

66746645
static void ggml_byteswap_q4_k(void * restrict buffer, size_t elements) {
66756646
block_q4_K *data_ptr = (block_q4_K*) buffer;
66766647
for (size_t i = 0; i < elements; ++i) {
6677-
convert_from_le16(&(data_ptr[i].d));
6678-
convert_from_le16(&(data_ptr[i].dmin));
6648+
ggml_convert_from_le16(&(data_ptr[i].d));
6649+
ggml_convert_from_le16(&(data_ptr[i].dmin));
66796650
}
66806651
}
66816652

66826653
static void ggml_byteswap_q5_k(void * restrict buffer, size_t elements) {
66836654
block_q5_K *data_ptr = (block_q5_K*) buffer;
66846655
for (size_t i = 0; i < elements; ++i) {
6685-
convert_from_le16(&(data_ptr[i].d));
6686-
convert_from_le16(&(data_ptr[i].dmin));
6656+
ggml_convert_from_le16(&(data_ptr[i].d));
6657+
ggml_convert_from_le16(&(data_ptr[i].dmin));
66876658
}
66886659
}
66896660

66906661
static void ggml_byteswap_q6_k(void * restrict buffer, size_t elements) {
66916662
block_q6_K *data_ptr = (block_q6_K*) buffer;
66926663
for (size_t i = 0; i < elements; ++i) {
6693-
convert_from_le16(&(data_ptr[i].d));
6664+
ggml_convert_from_le16(&(data_ptr[i].d));
66946665
}
66956666
}
66966667

66976668
static void ggml_byteswap_iq2_xxs(void * restrict buffer, size_t elements) {
66986669
block_iq2_xxs *data_ptr = (block_iq2_xxs*) buffer;
66996670
for (size_t i = 0; i < elements; ++i) {
6700-
convert_from_le16(&(data_ptr[i].d));
6671+
ggml_convert_from_le16(&(data_ptr[i].d));
67016672
for (size_t j = 0; j < QK_K/8; ++j) {
6702-
convert_from_le16(&(data_ptr[i].qs[j]));
6673+
ggml_convert_from_le16(&(data_ptr[i].qs[j]));
67036674
}
67046675
}
67056676
}
67066677

67076678
static void ggml_byteswap_iq2_xs(void * restrict buffer, size_t elements) {
67086679
block_iq2_xs *data_ptr = (block_iq2_xs*) buffer;
67096680
for (size_t i = 0; i < elements; ++i) {
6710-
convert_from_le16(&(data_ptr[i].d));
6681+
ggml_convert_from_le16(&(data_ptr[i].d));
67116682
for (size_t j = 0; j < QK_K/8; ++j) {
6712-
convert_from_le16(&(data_ptr[i].qs[j]));
6683+
ggml_convert_from_le16(&(data_ptr[i].qs[j]));
67136684
}
67146685
}
67156686
}
67166687

67176688
static void ggml_byteswap_iq3_xxs(void * restrict buffer, size_t elements) {
67186689
block_iq3_xxs *data_ptr = (block_iq3_xxs*) buffer;
67196690
for (size_t i = 0; i < elements; ++i) {
6720-
convert_from_le16(&(data_ptr[i].d));
6691+
ggml_convert_from_le16(&(data_ptr[i].d));
67216692
}
67226693
}
67236694

67246695
static void ggml_byteswap_iq3_s(void * restrict buffer, size_t elements) {
67256696
block_iq3_s *data_ptr = (block_iq3_s*) buffer;
67266697
for (size_t i = 0; i < elements; ++i) {
6727-
convert_from_le16(&(data_ptr[i].d));
6698+
ggml_convert_from_le16(&(data_ptr[i].d));
67286699
}
67296700
}
67306701

67316702
static void ggml_byteswap_iq2_s(void * restrict buffer, size_t elements) {
67326703
block_iq2_s *data_ptr = (block_iq2_s*) buffer;
67336704
for (size_t i = 0; i < elements; ++i) {
6734-
convert_from_le16(&(data_ptr[i].d));
6705+
ggml_convert_from_le16(&(data_ptr[i].d));
67356706
}
67366707
}
67376708

67386709
static void ggml_byteswap_iq1_s(void * restrict buffer, size_t elements) {
67396710
block_iq1_s *data_ptr = (block_iq1_s*) buffer;
67406711
for (size_t i = 0; i < elements; ++i) {
6741-
convert_from_le16(&(data_ptr[i].d));
6712+
ggml_convert_from_le16(&(data_ptr[i].d));
67426713
for (size_t j = 0; j < QK_K/32; ++j) {
6743-
convert_from_le16(&(data_ptr[i].qh[j]));
6714+
ggml_convert_from_le16(&(data_ptr[i].qh[j]));
67446715
}
67456716
}
67466717
}
67476718

67486719
static void ggml_byteswap_iq4_nl(void * restrict buffer, size_t elements) {
67496720
block_iq4_nl *data_ptr = (block_iq4_nl*) buffer;
67506721
for (size_t i = 0; i < elements; ++i) {
6751-
convert_from_le16(&(data_ptr[i].d));
6722+
ggml_convert_from_le16(&(data_ptr[i].d));
67526723
}
67536724
}
67546725

67556726
static void ggml_byteswap_iq4_xs(void * restrict buffer, size_t elements) {
67566727
block_iq4_xs *data_ptr = (block_iq4_xs*) buffer;
67576728
for (size_t i = 0; i < elements; ++i) {
6758-
convert_from_le16(&(data_ptr[i].d));
6759-
convert_from_le16(&(data_ptr[i].scales_h));
6729+
ggml_convert_from_le16(&(data_ptr[i].d));
6730+
ggml_convert_from_le16(&(data_ptr[i].scales_h));
67606731
}
67616732
}
67626733

67636734
static void ggml_byteswap_q8_k(void * restrict buffer, size_t elements) {
67646735
block_q8_K *data_ptr = (block_q8_K*) buffer;
67656736
for (size_t i = 0; i < elements; ++i) {
6766-
convert_from_le32(&(data_ptr[i].d));
6737+
ggml_convert_from_le32(&(data_ptr[i].d));
67676738
for (size_t j = 0; j < QK_K/16; ++j) {
6768-
convert_from_le16(&(data_ptr[i].bsums[j]));
6739+
ggml_convert_from_le16(&(data_ptr[i].bsums[j]));
67696740
}
67706741
}
67716742
}
@@ -6791,13 +6762,13 @@ static void ggml_byteswap_q4_0_8x8(void * restrict buffer, size_t elements) {
67916762
static void ggml_byteswap_tq1_0(void * restrict buffer, size_t elements) {
67926763
block_tq1_0 *data_ptr = (block_tq1_0*) buffer;
67936764
for (size_t i = 0; i < elements; ++i) {
6794-
convert_from_le16(&(data_ptr[i].d));
6765+
ggml_convert_from_le16(&(data_ptr[i].d));
67956766
}
67966767
}
67976768

67986769
static void ggml_byteswap_tq2_0(void * restrict buffer, size_t elements) {
67996770
block_tq2_0 *data_ptr = (block_tq2_0*) buffer;
68006771
for (size_t i = 0; i < elements; ++i) {
6801-
convert_from_le16(&(data_ptr[i].d));
6772+
ggml_convert_from_le16(&(data_ptr[i].d));
68026773
}
68036774
}

0 commit comments

Comments
 (0)