use id for color; simple_hash removed.

This commit is contained in:
Judd 2024-12-15 19:00:36 +08:00
parent 504121ec4b
commit 39f8347504

View file

@ -2031,21 +2031,15 @@ static void ggml_backend_sched_splits_fdump_dot(FILE * fp, ggml_backend_sched_t
} }
} }
static uint32_t simple_hash(const unsigned char *str)
{
uint32_t hash = 5381;
while (unsigned char c = *str++) hash = hash * 33 + c;
return hash;
}
static const char *ggml_color_of_backend(ggml_backend_sched_t sched, struct ggml_tensor * node) { static const char *ggml_color_of_backend(ggml_backend_sched_t sched, struct ggml_tensor * node) {
#ifndef GGML_DOT_FULL_COLOR #ifndef GGML_DOT_FULL_COLOR
#define COLOR_NUM 12 const int COLOR_NUM = 12; // number of colors in `set312`
#define DEF_COLOR 0 const int DEF_COLOR = 0;
#else #else
#define COLOR_NUM 0x1000000 const int COLOR_NUM = GGML_SCHED_MAX_BACKENDS;
#define DEF_COLOR 0x0ffffff const int DEF_COLOR = COLOR_NUM - 1;
#endif #endif
const int SHUFFLE = 2027; // a prime
static char color[32]; static char color[32];
uint32_t color1 = DEF_COLOR; uint32_t color1 = DEF_COLOR;
@ -2053,21 +2047,25 @@ static const char *ggml_color_of_backend(ggml_backend_sched_t sched, struct ggml
ggml_backend_t backend = ggml_backend_sched_get_tensor_backend(sched, node); ggml_backend_t backend = ggml_backend_sched_get_tensor_backend(sched, node);
if (backend) { if (backend) {
const char *name = ggml_backend_name(backend); color1 = (tensor_backend_id(node) * SHUFFLE) % COLOR_NUM;
color1 = simple_hash((const unsigned char *)name) % COLOR_NUM;
color2 = color1; color2 = color1;
} }
if (node->buffer) { if (node->buffer) {
ggml_backend_buffer_type_t buft = node->buffer->buft; ggml_backend_buffer_type_t buft = node->buffer->buft;
if (backend && !ggml_backend_supports_buft(backend, buft)) { if (backend && !ggml_backend_supports_buft(backend, buft)) {
color2 = simple_hash((const unsigned char *)ggml_backend_buft_name(buft)) % COLOR_NUM; for (int i = 0; i < sched->n_backends; i++) {
if (color2 == color1) color2 = (~color1) % COLOR_NUM; if (sched->bufts[i] == buft) {
color2 = (i * SHUFFLE) % COLOR_NUM;
break;
}
}
if (color2 == color1) color2 = (color2 + COLOR_NUM / 2) % COLOR_NUM;
} }
} }
#ifndef GGML_DOT_FULL_COLOR #ifndef GGML_DOT_FULL_COLOR
snprintf(color, sizeof(color), "%d;0.5:%d", color1 + 1, color2 + 1); snprintf(color, sizeof(color), "%d;0.5:%d", color1 + 1, color2 + 1);
#else #else
snprintf(color, sizeof(color), "#%06x;0.5:#%06x", color1, color2); snprintf(color, sizeof(color), "%.3f 0.4 1.0;0.5:%.3f 0.4 1.0", (float)color1 / COLOR_NUM / 2, (float)color2 / COLOR_NUM / 2);
#endif #endif
return color; return color;
} }