From 0d7043f1340d619cdf953d9c21566b0f07b944e2 Mon Sep 17 00:00:00 2001 From: Amr Morsey Date: Mon, 17 Feb 2025 13:38:10 +0200 Subject: [PATCH 01/10] New Allocator --- include/utils.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/include/utils.h b/include/utils.h index abce21f62..ae4ed0618 100644 --- a/include/utils.h +++ b/include/utils.h @@ -263,7 +263,11 @@ inline void alloc_aligned(void **ptr, size_t size, size_t align) #ifndef _WINDOWS *ptr = ::aligned_alloc(align, size); #else - *ptr = ::_aligned_malloc(size, align); // note the swapped arguments! + #ifdef EXEC_ENV_OLS + *ptr = static_cast(operator new(size, std::align_val_t(align))); + #else + *ptr = ::_aligned_malloc(size, align); // note the swapped arguments! + #endif #endif if (*ptr == nullptr) report_memory_allocation_failure(); From 92dae9d8701fea1e997dd230d0eade485175197f Mon Sep 17 00:00:00 2001 From: Amr Morsey Date: Tue, 25 Feb 2025 15:55:51 +0200 Subject: [PATCH 02/10] WIP --- .vscode/settings.json | 21 +++++++++++++++++++++ include/utils.h | 14 ++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..fafe181a8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,21 @@ +{ + "files.associations": { + "charconv": "cpp", + "xmemory": "cpp", + "array": "cpp", + "deque": "cpp", + "format": "cpp", + "initializer_list": "cpp", + "list": "cpp", + "queue": "cpp", + "random": "cpp", + "stack": "cpp", + "utility": "cpp", + "vector": "cpp", + "xhash": "cpp", + "xstring": "cpp", + "xtree": "cpp", + "xutility": "cpp", + "ostream": "cpp" + } +} \ No newline at end of file diff --git a/include/utils.h b/include/utils.h index ae4ed0618..527cd6ef9 100644 --- a/include/utils.h +++ b/include/utils.h @@ -278,7 +278,13 @@ inline void realloc_aligned(void **ptr, size_t size, size_t align) if (IS_ALIGNED(size, align) == 0) report_misalignment_of_requested_size(align); #ifdef _WINDOWS - *ptr = ::_aligned_realloc(*ptr, size, align); + #ifdef EXEC_ENV_OLS + void *newptr = static_cast(operator new(size, std::align_val_t(align))); + std::memcpy(newptr, ptr, size); + ptr = newptr; + #else + *ptr = ::_aligned_realloc(*ptr, size, align); + #endif #else diskann::cerr << "No aligned realloc on GCC. Must malloc and mem_align, " "left it out for now." @@ -306,7 +312,11 @@ inline void aligned_free(void *ptr) #ifndef _WINDOWS free(ptr); #else - ::_aligned_free(ptr); + #ifdef EXEC_ENV_OLS + delete ptr; + #else + ::_aligned_free(ptr); + #endif #endif } From 5b97c98f7f9ff24e51f3dcdab002bf62e8ba7484 Mon Sep 17 00:00:00 2001 From: Amr Morsey Date: Tue, 25 Feb 2025 16:58:58 +0200 Subject: [PATCH 03/10] Fix bug --- include/utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/utils.h b/include/utils.h index 527cd6ef9..7093190e2 100644 --- a/include/utils.h +++ b/include/utils.h @@ -281,7 +281,7 @@ inline void realloc_aligned(void **ptr, size_t size, size_t align) #ifdef EXEC_ENV_OLS void *newptr = static_cast(operator new(size, std::align_val_t(align))); std::memcpy(newptr, ptr, size); - ptr = newptr; + *ptr = newptr; #else *ptr = ::_aligned_realloc(*ptr, size, align); #endif From 422d673eadcf17d1c00bea1a5616b0ebe77e2860 Mon Sep 17 00:00:00 2001 From: Amr Morsey Date: Tue, 25 Feb 2025 22:12:10 +0200 Subject: [PATCH 04/10] fix bug --- include/utils.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/include/utils.h b/include/utils.h index 7093190e2..bd1c9295a 100644 --- a/include/utils.h +++ b/include/utils.h @@ -279,8 +279,10 @@ inline void realloc_aligned(void **ptr, size_t size, size_t align) report_misalignment_of_requested_size(align); #ifdef _WINDOWS #ifdef EXEC_ENV_OLS - void *newptr = static_cast(operator new(size, std::align_val_t(align))); - std::memcpy(newptr, ptr, size); + void *newptr; + alloc_aligned(&newptr, size, align); + std::memcpy(newptr, *ptr, size); + aligned_free(*ptr); *ptr = newptr; #else *ptr = ::_aligned_realloc(*ptr, size, align); @@ -314,6 +316,7 @@ inline void aligned_free(void *ptr) #else #ifdef EXEC_ENV_OLS delete ptr; + ptr = nullptr; #else ::_aligned_free(ptr); #endif From 30b36a286793cab9090a06980d280237a4fe5e08 Mon Sep 17 00:00:00 2001 From: Amr Morsey Date: Wed, 26 Feb 2025 00:51:43 +0200 Subject: [PATCH 05/10] fix bug --- include/utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/utils.h b/include/utils.h index bd1c9295a..a5e5b796b 100644 --- a/include/utils.h +++ b/include/utils.h @@ -282,7 +282,8 @@ inline void realloc_aligned(void **ptr, size_t size, size_t align) void *newptr; alloc_aligned(&newptr, size, align); std::memcpy(newptr, *ptr, size); - aligned_free(*ptr); + delete ptr; + ptr = nullptr; *ptr = newptr; #else *ptr = ::_aligned_realloc(*ptr, size, align); From 60a2d3a46806e7e9aa8ac8b4a75183b1298a075b Mon Sep 17 00:00:00 2001 From: Amr Morsey Date: Wed, 26 Feb 2025 15:38:43 +0200 Subject: [PATCH 06/10] fix bug --- .vscode/settings.json | 3 ++- include/utils.h | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index fafe181a8..88e4872ba 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -16,6 +16,7 @@ "xstring": "cpp", "xtree": "cpp", "xutility": "cpp", - "ostream": "cpp" + "ostream": "cpp", + "iostream": "cpp" } } \ No newline at end of file diff --git a/include/utils.h b/include/utils.h index a5e5b796b..5ffdcb338 100644 --- a/include/utils.h +++ b/include/utils.h @@ -316,8 +316,7 @@ inline void aligned_free(void *ptr) free(ptr); #else #ifdef EXEC_ENV_OLS - delete ptr; - ptr = nullptr; + diskann::cout << "No aligned free on custom allocator"<< std::endl; #else ::_aligned_free(ptr); #endif From cb3bbd607f7fdf2ff5dbd2650e788dd2032c518c Mon Sep 17 00:00:00 2001 From: Amr Morsey Date: Thu, 27 Feb 2025 12:54:50 +0200 Subject: [PATCH 07/10] fix bug --- include/utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/utils.h b/include/utils.h index 5ffdcb338..a5e5b796b 100644 --- a/include/utils.h +++ b/include/utils.h @@ -316,7 +316,8 @@ inline void aligned_free(void *ptr) free(ptr); #else #ifdef EXEC_ENV_OLS - diskann::cout << "No aligned free on custom allocator"<< std::endl; + delete ptr; + ptr = nullptr; #else ::_aligned_free(ptr); #endif From e539aafd498faaa60bb5680dd1f851bf0c69df1e Mon Sep 17 00:00:00 2001 From: Amr Morsey Date: Thu, 27 Feb 2025 13:40:57 +0200 Subject: [PATCH 08/10] fix bug --- include/utils.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/utils.h b/include/utils.h index a5e5b796b..f2b57572f 100644 --- a/include/utils.h +++ b/include/utils.h @@ -283,7 +283,6 @@ inline void realloc_aligned(void **ptr, size_t size, size_t align) alloc_aligned(&newptr, size, align); std::memcpy(newptr, *ptr, size); delete ptr; - ptr = nullptr; *ptr = newptr; #else *ptr = ::_aligned_realloc(*ptr, size, align); @@ -317,7 +316,6 @@ inline void aligned_free(void *ptr) #else #ifdef EXEC_ENV_OLS delete ptr; - ptr = nullptr; #else ::_aligned_free(ptr); #endif From aa53d2e8ad71dfcbc70a6ff19b99fa475c8f5329 Mon Sep 17 00:00:00 2001 From: Amr Morsey Date: Wed, 5 Mar 2025 13:25:54 +0200 Subject: [PATCH 09/10] fix bug --- include/utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/utils.h b/include/utils.h index f2b57572f..0d534d56b 100644 --- a/include/utils.h +++ b/include/utils.h @@ -264,7 +264,7 @@ inline void alloc_aligned(void **ptr, size_t size, size_t align) *ptr = ::aligned_alloc(align, size); #else #ifdef EXEC_ENV_OLS - *ptr = static_cast(operator new(size, std::align_val_t(align))); + *ptr = static_cast(new(size, std::align_val_t(align))); #else *ptr = ::_aligned_malloc(size, align); // note the swapped arguments! #endif From d90adaace768985a1e2f1b1cd5ceb91a76687270 Mon Sep 17 00:00:00 2001 From: Amr Morsey Date: Wed, 5 Mar 2025 13:51:52 +0200 Subject: [PATCH 10/10] fix bug --- .vscode/settings.json | 64 ++++++++++++++++++++++++++++++++++++++++++- include/utils.h | 2 +- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 88e4872ba..c6e7b455c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -17,6 +17,68 @@ "xtree": "cpp", "xutility": "cpp", "ostream": "cpp", - "iostream": "cpp" + "iostream": "cpp", + "algorithm": "cpp", + "any": "cpp", + "atomic": "cpp", + "bit": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "codecvt": "cpp", + "compare": "cpp", + "concepts": "cpp", + "condition_variable": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "exception": "cpp", + "forward_list": "cpp", + "fstream": "cpp", + "functional": "cpp", + "future": "cpp", + "iomanip": "cpp", + "ios": "cpp", + "iosfwd": "cpp", + "istream": "cpp", + "iterator": "cpp", + "limits": "cpp", + "locale": "cpp", + "map": "cpp", + "memory": "cpp", + "mutex": "cpp", + "new": "cpp", + "numeric": "cpp", + "optional": "cpp", + "ratio": "cpp", + "set": "cpp", + "shared_mutex": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "string": "cpp", + "system_error": "cpp", + "thread": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "typeinfo": "cpp", + "unordered_map": "cpp", + "unordered_set": "cpp", + "xfacet": "cpp", + "xiosbase": "cpp", + "xlocale": "cpp", + "xlocbuf": "cpp", + "xlocinfo": "cpp", + "xlocmes": "cpp", + "xlocmon": "cpp", + "xlocnum": "cpp", + "xloctime": "cpp", + "xtr1common": "cpp" } } \ No newline at end of file diff --git a/include/utils.h b/include/utils.h index 0d534d56b..0b86e5057 100644 --- a/include/utils.h +++ b/include/utils.h @@ -264,7 +264,7 @@ inline void alloc_aligned(void **ptr, size_t size, size_t align) *ptr = ::aligned_alloc(align, size); #else #ifdef EXEC_ENV_OLS - *ptr = static_cast(new(size, std::align_val_t(align))); + *ptr = operator new(size, std::align_val_t(align)); #else *ptr = ::_aligned_malloc(size, align); // note the swapped arguments! #endif