From d71bbd5b0a4acc39dfb63ccc1cc56001b68e4f1a Mon Sep 17 00:00:00 2001 From: Yu Feng Date: Sat, 7 Oct 2023 20:23:29 -0700 Subject: [PATCH 1/2] Fix build issues with recent Cython versions. (And first time building on a M2 aarch64. runtests passed. Yay) --- Makefile | 2 +- bench-mpi.c | 2 +- mpsort/binding.pyx | 14 +++++++------- mpsort/tests/test_mpsort.py | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index e4ba2ec..affc66a 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ main: main.c libmpsort-omp.a libradixsort.a $(CC) $(CFLAGS) -o main $^ main-mpi: main-mpi.c libmpsort-mpi.a libradixsort.a $(MPICC) $(CFLAGS) -o main-mpi $^ -bench-mpi: bench-mpi.c libmpsort-mpi.a libradixsort.a mp-mpiu.h +bench-mpi: bench-mpi.c libmpsort-mpi.a libradixsort.a $(MPICC) $(CFLAGS) -o bench-mpi $^ test-issue7: test-issue7.c libmpsort-mpi.a libradixsort.a $(MPICC) $(CFLAGS) -o test-issue7 $^ diff --git a/bench-mpi.c b/bench-mpi.c index bd0a546..978d2ae 100644 --- a/bench-mpi.c +++ b/bench-mpi.c @@ -8,7 +8,7 @@ #include #include "mpsort.h" -#include "mpiu.h" +#include "mp-mpiu.h" static void radix_int(const void * ptr, void * radix, void * arg) { *(uint64_t*)radix = *(const int64_t*) ptr + INT64_MIN; diff --git a/mpsort/binding.pyx b/mpsort/binding.pyx index b627d91..566db9a 100644 --- a/mpsort/binding.pyx +++ b/mpsort/binding.pyx @@ -28,8 +28,8 @@ cdef extern from "mpsort.h": # Use the Python memory allocator for large allocations. # cdef extern from "mp-mpiu.h": - ctypedef void * (*mpiu_malloc_func)(char * name, size_t size, char * file, int line, void * userdata) - ctypedef void (*mpiu_free_func)(void * ptr, const char * file, int line, void * userdata) + ctypedef void * (*mpiu_malloc_func)(char * name, size_t size, char * file, int line, void * userdata) except? NULL + ctypedef void (*mpiu_free_func)(void * ptr, const char * file, int line, void * userdata) except* void MPIU_SetMalloc(mpiu_malloc_func malloc, mpiu_free_func free, void * userdata) cdef void * pymalloc(char * name, size_t size, char * file, int line, void * userdata): @@ -42,7 +42,7 @@ MPIU_SetMalloc(pymalloc, pyfree, NULL) # how to build the radix: cdef struct RadixData: - void (*radix_func)(const void * ptr, void * radix, void * arg) nogil + void (*radix_func)(const void * ptr, void * radix, void * arg) noexcept nogil ptrdiff_t radix_offset int elsize int radix_nmemb @@ -78,7 +78,7 @@ cdef radix_data_init(RadixData * self, numpy.dtype dtype, radixkey): else: raise TypeError("data[%s] is not u8 or i8" % (radixkey)) -cdef void radix_func_u8(const void * ptr, void * radix, void * arg) nogil: +cdef void radix_func_u8(const void * ptr, void * radix, void * arg) noexcept nogil: cdef RadixData *radixdata = arg cdef char * rptr = radix cdef char * cptr = ptr @@ -88,7 +88,7 @@ cdef void radix_func_u8(const void * ptr, void * radix, void * arg) nogil: memcpy(rptr, &value, 8) rptr += 8 -cdef void radix_func_i8(const void * ptr, void * radix, void * arg) nogil: +cdef void radix_func_i8(const void * ptr, void * radix, void * arg) noexcept nogil: cdef RadixData *radixdata = arg cdef char * rptr = radix cdef char * cptr = ptr @@ -99,7 +99,7 @@ cdef void radix_func_i8(const void * ptr, void * radix, void * arg) nogil: memcpy(rptr, &value, 8) rptr += 8 -cdef void radix_func_u4(const void * ptr, void * radix, void * arg) nogil: +cdef void radix_func_u4(const void * ptr, void * radix, void * arg) noexcept nogil: cdef RadixData *radixdata = arg cdef char * rptr = radix cdef char * cptr = ptr @@ -109,7 +109,7 @@ cdef void radix_func_u4(const void * ptr, void * radix, void * arg) nogil: memcpy(rptr, &value, 8) rptr += 8 -cdef void radix_func_i4(const void * ptr, void * radix, void * arg) nogil: +cdef void radix_func_i4(const void * ptr, void * radix, void * arg) noexcept nogil: cdef RadixData *radixdata = arg cdef char * rptr = radix cdef char * cptr = ptr diff --git a/mpsort/tests/test_mpsort.py b/mpsort/tests/test_mpsort.py index e1d3170..611d676 100644 --- a/mpsort/tests/test_mpsort.py +++ b/mpsort/tests/test_mpsort.py @@ -54,7 +54,7 @@ def test_sort_i8(comm): @MPITest(commsize=(1, 2, 3, 4)) def test_sort_u8(comm): - s = numpy.uint64(numpy.random.random(size=1000) * 1000 - 400) + s = numpy.uint64(numpy.random.uniform(size=1000, low=-1000000, high=1000000) * 1000 - 400) local = split(s, comm) s = heal(local, comm) From 8cfadd4f65e0437c4303940595a67a83671bbc29 Mon Sep 17 00:00:00 2001 From: Yu Feng Date: Sat, 7 Oct 2023 20:56:29 -0700 Subject: [PATCH 2/2] further fixes --- mpsort/binding.pyx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mpsort/binding.pyx b/mpsort/binding.pyx index 566db9a..96fbb8e 100644 --- a/mpsort/binding.pyx +++ b/mpsort/binding.pyx @@ -32,10 +32,10 @@ cdef extern from "mp-mpiu.h": ctypedef void (*mpiu_free_func)(void * ptr, const char * file, int line, void * userdata) except* void MPIU_SetMalloc(mpiu_malloc_func malloc, mpiu_free_func free, void * userdata) -cdef void * pymalloc(char * name, size_t size, char * file, int line, void * userdata): +cdef void * pymalloc(char * name, size_t size, char * file, int line, void * userdata) except? NULL: return PyMem_Malloc(size) -cdef void pyfree(void * ptr, char * file, int line, void * userdata): +cdef void pyfree(void * ptr, char * file, int line, void * userdata) except*: PyMem_Free(ptr) MPIU_SetMalloc(pymalloc, pyfree, NULL)