From 39f83475040da9c6587a1cab5908eb91d9bf9fd6 Mon Sep 17 00:00:00 2001 From: Judd Date: Sun, 15 Dec 2024 19:00:36 +0800 Subject: [PATCH] use `id` for color; `simple_hash` removed. --- ggml/src/ggml-backend.cpp | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/ggml/src/ggml-backend.cpp b/ggml/src/ggml-backend.cpp index 208cd5df5..d91715e27 100644 --- a/ggml/src/ggml-backend.cpp +++ b/ggml/src/ggml-backend.cpp @@ -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) { #ifndef GGML_DOT_FULL_COLOR - #define COLOR_NUM 12 - #define DEF_COLOR 0 + const int COLOR_NUM = 12; // number of colors in `set312` + const int DEF_COLOR = 0; #else - #define COLOR_NUM 0x1000000 - #define DEF_COLOR 0x0ffffff + const int COLOR_NUM = GGML_SCHED_MAX_BACKENDS; + const int DEF_COLOR = COLOR_NUM - 1; #endif + const int SHUFFLE = 2027; // a prime static char color[32]; 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); if (backend) { - const char *name = ggml_backend_name(backend); - color1 = simple_hash((const unsigned char *)name) % COLOR_NUM; + color1 = (tensor_backend_id(node) * SHUFFLE) % COLOR_NUM; color2 = color1; } if (node->buffer) { ggml_backend_buffer_type_t buft = node->buffer->buft; if (backend && !ggml_backend_supports_buft(backend, buft)) { - color2 = simple_hash((const unsigned char *)ggml_backend_buft_name(buft)) % COLOR_NUM; - if (color2 == color1) color2 = (~color1) % COLOR_NUM; + for (int i = 0; i < sched->n_backends; i++) { + 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 snprintf(color, sizeof(color), "%d;0.5:%d", color1 + 1, color2 + 1); #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 return color; }