Changeset: 2f7da450d7cc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2f7da450d7cc
Modified Files:
gdk/gdk_analytic_func.c
Branch: Nov2019
Log Message:
32 vs 64 ntile fix and extracted constant variables from loop
diffs (100 lines):
diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -133,28 +133,27 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
return GDK_SUCCEED;
}
-#define NTILE_CALC(TPE) \
+#define NTILE_CALC(TPE, CAST2, CAST3) \
do { \
- if (ntile_value >= ncnt) { \
+ if ((CAST2) nval >= (CAST3) ncnt) { \
for (i = 1; rb < rp; i++, rb++) \
*rb = i; \
} else { \
- BUN bsize = ncnt / ntile_value; \
+ BUN bsize = ncnt / nval; \
+ BUN top = ncnt - nval * bsize; \
+ BUN small = top * (bsize + 1); \
for (i = 0; rb < rp; i++, rb++) { \
- BUN top = ncnt - ntile_value * bsize; \
- BUN small = top * (bsize + 1); \
- if ((BUN)i < small) \
- *rb = (TPE)((1 + (BUN)i / (bsize +
1))); \
+ if ((CAST2) i < (CAST3) small) \
+ *rb = (TPE)(1 + i / (bsize + 1)); \
else \
- *rb = (TPE)((1 + top + ((BUN)i - small)
/ bsize)); \
+ *rb = (TPE)(1 + top + (i - small) /
bsize); \
} \
} \
} while (0)
-#define ANALYTICAL_NTILE_IMP(TPE) \
+#define ANALYTICAL_NTILE_IMP(TPE, CAST1, CAST2, CAST3) \
do { \
- TPE i, *rp, *rb, val = *(TPE*) ntile; \
- BUN ntile_value = (BUN) val; \
+ TPE i, *rp, *rb, val = *(TPE*) ntile, nval = CAST1; \
rb = rp = (TPE*)Tloc(r, 0); \
if (is_##TPE##_nil(val)) { \
TPE *end = rp + cnt; \
@@ -168,16 +167,16 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
if (*np) { \
ncnt = np - pnp; \
rp += ncnt; \
- NTILE_CALC(TPE); \
+ NTILE_CALC(TPE, CAST2, CAST3);
\
pnp = np; \
} \
} \
ncnt = np - pnp; \
rp += ncnt; \
- NTILE_CALC(TPE); \
+ NTILE_CALC(TPE, CAST2, CAST3); \
} else { \
rp += cnt; \
- NTILE_CALC(TPE); \
+ NTILE_CALC(TPE, CAST2, CAST3); \
} \
} while (0)
@@ -192,20 +191,32 @@ GDKanalyticalntile(BAT *r, BAT *b, BAT *
switch (tpe) {
case TYPE_bte:
- ANALYTICAL_NTILE_IMP(bte);
+ ANALYTICAL_NTILE_IMP(bte, val, BUN, BUN);
break;
case TYPE_sht:
- ANALYTICAL_NTILE_IMP(sht);
+ ANALYTICAL_NTILE_IMP(sht, val, BUN, BUN);
break;
case TYPE_int:
- ANALYTICAL_NTILE_IMP(int);
+ ANALYTICAL_NTILE_IMP(int, val, BUN, BUN);
break;
case TYPE_lng:
- ANALYTICAL_NTILE_IMP(lng);
+ ANALYTICAL_NTILE_IMP(lng, val,
+#if SIZEOF_VAR_T == SIZEOF_INT
+ lng, lng
+#else
+ BUN, BUN
+#endif
+ );
break;
#ifdef HAVE_HGE
case TYPE_hge:
- ANALYTICAL_NTILE_IMP(hge);
+ ANALYTICAL_NTILE_IMP(hge, (val > (hge) GDK_lng_max) ?
GDK_lng_max : (lng) val,
+#if SIZEOF_VAR_T == SIZEOF_INT
+ lng, lng
+#else
+ BUN, BUN
+#endif
+ );
break;
#endif
default:
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list