diff --git a/CMakeLists.txt b/CMakeLists.txt index d78d2613251c..0b88247df27a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -388,9 +388,9 @@ cmake_dependent_option(USE_PRIORITIZED_TEXT_FOR_LD "Use prioritized text linker option(USE_MIMALLOC "Use mimalloc" OFF) # Enable third party mimalloc library to improve memory allocation performance -# on Windows. +# on Windows and AArch64. option(USE_MIMALLOC_ON_MKL "Use mimalloc on MKL" OFF) -if(WIN32) +if(WIN32 OR (CPU_AARCH64 AND NOT APPLE)) set(USE_MIMALLOC ON) # Not enable USE_MIMALLOC_ON_MKL due to it caused issue: diff --git a/c10/core/impl/alloc_cpu.cpp b/c10/core/impl/alloc_cpu.cpp index 791104690cd8..c1b7ca858632 100644 --- a/c10/core/impl/alloc_cpu.cpp +++ b/c10/core/impl/alloc_cpu.cpp @@ -108,12 +108,15 @@ void* alloc_cpu(size_t nbytes) { "DefaultCPUAllocator: not enough memory: you tried to allocate ", nbytes, " bytes."); -#elif defined(_MSC_VER) -#ifdef USE_MIMALLOC +#elif defined(USE_MIMALLOC) data = mi_malloc_aligned(nbytes, gAlignment); -#else + CAFFE_ENFORCE( + data, + "DefaultCPUAllocator: not enough memory: you tried to allocate ", + nbytes, + " bytes."); +#elif defined(_MSC_VER) data = _aligned_malloc(nbytes, gAlignment); -#endif CAFFE_ENFORCE( data, "DefaultCPUAllocator: not enough memory: you tried to allocate ", @@ -160,12 +163,10 @@ void* alloc_cpu(size_t nbytes) { } void free_cpu(void* data) { -#ifdef _MSC_VER #ifdef USE_MIMALLOC mi_free(data); -#else +#elif defined(_MSC_VER) _aligned_free(data); -#endif #else // NOLINTNEXTLINE(cppcoreguidelines-no-malloc) free(data); diff --git a/setup.py b/setup.py index 9f2eae6f6a90..bdfab24a0b32 100644 --- a/setup.py +++ b/setup.py @@ -225,7 +225,7 @@ # # USE_MIMALLOC # Static link mimalloc into C10, and use mimalloc in alloc_cpu & alloc_free. -# By default, It is only enabled on Windows. +# By default, It is only enabled on Windows and AArch64. # # BUILD_LIBTORCH_WHL # Builds libtorch.so and its dependencies as a wheel