From 070bd433ab027a2143364c467d95983f2317d3a3 Mon Sep 17 00:00:00 2001 From: Cheng Date: Wed, 18 Dec 2024 11:51:38 +0900 Subject: [PATCH] Shorter kernel name for Windows (#1701) * Shorter kernel name for Windows * Only hash the clipped part --- mlx/backend/common/compiled_cpu.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/mlx/backend/common/compiled_cpu.cpp b/mlx/backend/common/compiled_cpu.cpp index 853617f5a..eb08d070d 100644 --- a/mlx/backend/common/compiled_cpu.cpp +++ b/mlx/backend/common/compiled_cpu.cpp @@ -68,15 +68,20 @@ void* compile( std::string source_code = source_builder(); std::string kernel_file_name; - // Deal with long kernel names. Maximum length for files on macOS is 255 - // characters. Clip file name with a little extra room and append a 16 - // character hash. + // Deal with long kernel names. Maximum length for filename on macOS is 255 + // characters, and on Windows the maximum length for whole path is 260. Clip + // file name with a little extra room and append a 16 character hash. +#ifdef _WIN32 + constexpr int max_file_name_length = 140; +#else constexpr int max_file_name_length = 245; +#endif if (kernel_name.size() > max_file_name_length) { std::ostringstream file_name; file_name << std::string_view(kernel_name).substr(0, max_file_name_length - 16); - auto file_id = std::hash{}(kernel_name); + auto file_id = + std::hash{}(kernel_name.substr(max_file_name_length - 16)); file_name << "_" << std::hex << std::setw(16) << file_id << std::dec; kernel_file_name = file_name.str(); } else {