summaryrefslogtreecommitdiff
path: root/llama.cpp/ggml/src/ggml-hexagon/op-desc.h
diff options
context:
space:
mode:
Diffstat (limited to 'llama.cpp/ggml/src/ggml-hexagon/op-desc.h')
-rw-r--r--llama.cpp/ggml/src/ggml-hexagon/op-desc.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/llama.cpp/ggml/src/ggml-hexagon/op-desc.h b/llama.cpp/ggml/src/ggml-hexagon/op-desc.h
new file mode 100644
index 0000000..a1e8ddd
--- /dev/null
+++ b/llama.cpp/ggml/src/ggml-hexagon/op-desc.h
@@ -0,0 +1,153 @@
1#ifndef OP_DESC_H
2#define OP_DESC_H
3
4#define GGML_COMMON_IMPL_CPP
5#include "ggml-backend-impl.h"
6#include "ggml-common.h"
7
8#include <string>
9#include <stdio.h>
10
11struct op_desc {
12 char strides[64 * GGML_MAX_SRC];
13 char dims[64 * GGML_MAX_SRC];
14 char types[16 * GGML_MAX_SRC];
15 char buffs[64 * GGML_MAX_SRC];
16 char names[64 * GGML_MAX_SRC];
17
18 int format_tensor_dims(char * str, const struct ggml_tensor * t) {
19 if (t->ne[2] == 1 && t->ne[3] == 1) {
20 return sprintf(str, "%d:%d", (int) t->ne[0], (int) t->ne[1]);
21 } else {
22 return sprintf(str, "%d:%d:%d:%d", (int) t->ne[0], (int) t->ne[1], (int) t->ne[2], (int) t->ne[3]);
23 }
24 }
25
26 void format_op_dims(char * str, const struct ggml_tensor * t) {
27 char * p = str;
28
29 // append src0 and src1 (if any)
30 if (t->src[0]) {
31 p += format_tensor_dims(p, t->src[0]);
32
33 for (int i = 1; i < GGML_MAX_SRC && t->src[i]; i++) {
34 p += sprintf(p, " x ");
35 p += format_tensor_dims(p, t->src[i]);
36 }
37
38 p += sprintf(p, " -> ");
39 }
40
41 // format self dims separately for better visual alignment
42 char self[64];
43 format_tensor_dims(self, t);
44
45 p += sprintf(p, "%s", self);
46 }
47
48 int format_tensor_strides(char * str, const struct ggml_tensor * t) {
49 const char * c = ggml_is_contiguous(t) ? "" : "!";
50
51 if (t->ne[2] == 1 && t->ne[3] == 1) {
52 return sprintf(str, "%zu:%zu%s", (size_t) t->nb[0], (size_t) t->nb[1], c);
53 } else {
54 return sprintf(str, "%zu:%zu:%zu:%zu%s", (size_t) t->nb[0], (size_t) t->nb[1], (size_t) t->nb[2], (size_t) t->nb[3], c);
55 }
56 }
57
58 void format_op_strides(char * str, const struct ggml_tensor * t) {
59 char * p = str;
60
61 // append src0 and src1 (if any)
62 if (t->src[0]) {
63 p += format_tensor_strides(p, t->src[0]);
64
65 for (int i = 1; i < GGML_MAX_SRC && t->src[i]; i++) {
66 p += sprintf(p, " x ");
67 p += format_tensor_strides(p, t->src[i]);
68 }
69
70 p += sprintf(p, " -> ");
71 }
72
73 // format self dims separately for better visual alignment
74 char self[64];
75 format_tensor_strides(self, t);
76
77 p += sprintf(p, "%s", self);
78 }
79
80 void format_op_types(char * str, const struct ggml_tensor * t) {
81 char * p = str;
82
83 // append src0 and src1 (if any)
84 if (t->src[0]) {
85 p += sprintf(p, "%s", ggml_type_name(t->src[0]->type));
86
87 for (int i = 1; i < GGML_MAX_SRC && t->src[i]; i++) {
88 p += sprintf(p, " x ");
89 p += sprintf(p, "%s", ggml_type_name(t->src[i]->type));
90 }
91
92 p += sprintf(p, " -> ");
93 }
94
95 p += sprintf(p, "%s", ggml_type_name(t->type));
96 }
97
98 const char * tensor_buff_name(const struct ggml_tensor * t) {
99 if (t->buffer) {
100 return ggml_backend_buffer_name(t->buffer);
101 }
102 return "NONE";
103 }
104
105 void format_op_buffs(char * str, const struct ggml_tensor * t) {
106 char * p = str;
107
108 // append src0 and src1 (if any)
109 if (t->src[0]) {
110 p += sprintf(p, "%s", tensor_buff_name(t->src[0]));
111
112 for (int i = 1; i < GGML_MAX_SRC && t->src[i]; i++) {
113 p += sprintf(p, " x ");
114 p += sprintf(p, "%s", tensor_buff_name(t->src[i]));
115 }
116
117 p += sprintf(p, " -> ");
118 }
119
120 p += sprintf(p, "%s", tensor_buff_name(t));
121 }
122
123 void format_op_names(char * str, const struct ggml_tensor * t) {
124 char * p = str;
125
126 // append src0 and src1 (if any)
127 if (t->src[0]) {
128 p += sprintf(p, "%s", t->src[0]->name);
129
130 for (int i = 1; i < GGML_MAX_SRC && t->src[i]; i++) {
131 p += sprintf(p, " x ");
132 p += sprintf(p, "%s", t->src[i]->name);
133 }
134
135 p += sprintf(p, " -> ");
136 }
137
138 p += sprintf(p, "%s", t->name);
139 }
140
141 void format(const ggml_tensor * op) {
142 format_op_dims(dims, op);
143 format_op_strides(strides, op);
144 format_op_types(types, op);
145 format_op_buffs(buffs, op);
146 format_op_names(names, op);
147 }
148
149 op_desc() {}
150 op_desc(const ggml_tensor * op) { format(op); }
151};
152
153#endif // OP_DESC_H