From b9d5f10d4ae73eedaaeb5466a116553b1457b95e Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Sat, 22 Oct 2022 16:29:05 -0400 Subject: [PATCH] Unify radix sort and radix lookup prefix sums --- src/builtins/grade.h | 45 ++------------------------------------- src/builtins/radix.h | 36 +++++++++++++++++++++++++++++++ src/builtins/selfsearch.c | 13 +++++------ 3 files changed, 43 insertions(+), 51 deletions(-) create mode 100644 src/builtins/radix.h diff --git a/src/builtins/grade.h b/src/builtins/grade.h index 2643ccbb..8e9e0450 100644 --- a/src/builtins/grade.h +++ b/src/builtins/grade.h @@ -74,6 +74,7 @@ extern void (*const avx2_scan_min16)(int16_t* v0,int16_t* v1,uint64_t v2); TFREE(c0) // Radix sorting +#include "radix.h" #define INC(P,I) GRADE_UD((P+1)[I]++,P[I]--) #define ROFF GRADE_UD(1,0) // Radix offset @@ -81,7 +82,7 @@ extern void (*const avx2_scan_min16)(int16_t* v0,int16_t* v1,uint64_t v2); #define CHOOSE_SG_GRADE(S,G) G #define RADIX_SORT_i8(T, TYP) \ - TALLOC(T, c0, 256+ROFF); T* c0o=c0+128; \ + TALLOC(T, c0, 256+ROFF); T* c0o=c0+128; \ for (usz j=0; j<256; j++) c0[j]=0; \ GRADE_UD(,c0[0]=n;) \ for (usz i=0; i>24)]++; c1[(u8)(v>>16)]++; } \ - /* Exclusive prefix sum */ \ - usz s0=0, s1=0; \ - for (usz j=0; j>24)]++; (c1+1)[(u8)(v>>16)]++; } \ + /* Inclusive prefix sum; note c offsets above */ \ + RADIX_SUM_2_u32; \ /* Radix moves */ \ for (usz i=0; i>24); usz c=c0[k]++; v1[c]=v; } \ for (usz i=0; i>16); usz c=c1[k]++; v2[c]=v; } \