Changeset: 635434172391 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/635434172391 Modified Files: gdk/gdk_calc.c gdk/gdk_calc_compare.h gdk/gdk_cand.c gdk/gdk_firstn.c gdk/gdk_group.c gdk/gdk_imprints.c gdk/gdk_interprocess.c gdk/gdk_join.c Branch: Jul2021 Log Message:
Use more bat iterators to access data. diffs (truncated from 2832 to 300 lines): diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c --- a/gdk/gdk_calc.c +++ b/gdk/gdk_calc.c @@ -72,6 +72,7 @@ checkbats(BAT *b1, BAT *b2, const char * OP "(" FMT##TYPE ").\n", \ CST##TYPE src[x]); \ BBPreclaim(bn); \ + bat_iterator_end(&bi); \ return NULL; \ } while (0) @@ -85,7 +86,7 @@ checkbats(BAT *b1, BAT *b2, const char * #define UNARY_2TYPE_FUNC(TYPE1, TYPE2, FUNC) \ do { \ - const TYPE1 *restrict src = (const TYPE1 *) Tloc(b, 0); \ + const TYPE1 *restrict src = (const TYPE1 *) bi.base; \ TYPE2 *restrict dst = (TYPE2 *) Tloc(bn, 0); \ for (i = 0; i < ncand; i++) { \ x = canditer_next(&ci) - bhseqbase; \ @@ -100,7 +101,7 @@ checkbats(BAT *b1, BAT *b2, const char * #define UNARY_2TYPE_FUNC_nilcheck(TYPE1, TYPE2, FUNC, on_overflow) \ do { \ - const TYPE1 *restrict src = (const TYPE1 *) Tloc(b, 0); \ + const TYPE1 *restrict src = (const TYPE1 *) bi.base; \ TYPE2 *restrict dst = (TYPE2 *) Tloc(bn, 0); \ for (i = 0; i < ncand; i++) { \ x = canditer_next(&ci) - bhseqbase; \ @@ -370,10 +371,11 @@ BATcalcnot(BAT *b, BAT *s) if (bn == NULL) return NULL; + BATiter bi = bat_iterator(b); switch (ATOMbasetype(b->ttype)) { case TYPE_msk: if (ci.tpe == cand_dense) { - const uint32_t *restrict src = Tloc(b, (ci.seq - b->hseqbase) / 32); + const uint32_t *restrict src = (const uint32_t *) bi.base + (ci.seq - b->hseqbase) / 32; uint32_t *restrict dst = Tloc(bn, 0); int bits = (ci.seq - b->hseqbase) % 32; ncand = (ncand + 31) / 32; @@ -389,7 +391,7 @@ BATcalcnot(BAT *b, BAT *s) } else { for (i = 0; i < ncand; i++) { x = canditer_next(&ci) - bhseqbase; - mskSetVal(bn, i, !mskGetVal(b, x)); + mskSetVal(bn, i, !Tmskval(&bi, x)); } } break; @@ -415,10 +417,12 @@ BATcalcnot(BAT *b, BAT *s) break; #endif default: + bat_iterator_end(&bi); BBPunfix(bn->batCacheid); GDKerror("type %s not supported.\n", ATOMname(b->ttype)); return NULL; } + bat_iterator_end(&bi); BATsetcount(bn, ci.ncand); @@ -544,6 +548,7 @@ BATcalcnegate(BAT *b, BAT *s) if (bn == NULL) return NULL; + BATiter bi = bat_iterator(b); switch (ATOMbasetype(b->ttype)) { case TYPE_bte: UNARY_2TYPE_FUNC(bte, bte, NEGATE); @@ -569,10 +574,12 @@ BATcalcnegate(BAT *b, BAT *s) UNARY_2TYPE_FUNC(dbl, dbl, NEGATE); break; default: + bat_iterator_end(&bi); BBPunfix(bn->batCacheid); GDKerror("type %s not supported.\n", ATOMname(b->ttype)); return NULL; } + bat_iterator_end(&bi); BATsetcount(bn, ncand); @@ -672,6 +679,7 @@ BATcalcabsolute(BAT *b, BAT *s) if (bn == NULL) return NULL; + BATiter bi = bat_iterator(b); switch (ATOMbasetype(b->ttype)) { case TYPE_bte: UNARY_2TYPE_FUNC(bte, bte, (bte) abs); @@ -697,10 +705,12 @@ BATcalcabsolute(BAT *b, BAT *s) UNARY_2TYPE_FUNC(dbl, dbl, fabs); break; default: + bat_iterator_end(&bi); BBPunfix(bn->batCacheid); GDKerror("bad input type %s.\n", ATOMname(b->ttype)); return NULL; } + bat_iterator_end(&bi); BATsetcount(bn, ncand); @@ -804,6 +814,7 @@ BATcalciszero(BAT *b, BAT *s) if (bn == NULL) return NULL; + BATiter bi = bat_iterator(b); switch (ATOMbasetype(b->ttype)) { case TYPE_bte: UNARY_2TYPE_FUNC(bte, bit, ISZERO); @@ -829,10 +840,12 @@ BATcalciszero(BAT *b, BAT *s) UNARY_2TYPE_FUNC(dbl, bit, ISZERO); break; default: + bat_iterator_end(&bi); BBPunfix(bn->batCacheid); GDKerror("bad input type %s.\n", ATOMname(b->ttype)); return NULL; } + bat_iterator_end(&bi); BATsetcount(bn, ncand); @@ -934,6 +947,7 @@ BATcalcsign(BAT *b, BAT *s) if (bn == NULL) return NULL; + BATiter bi = bat_iterator(b); switch (ATOMbasetype(b->ttype)) { case TYPE_bte: UNARY_2TYPE_FUNC(bte, bte, SIGN); @@ -959,10 +973,12 @@ BATcalcsign(BAT *b, BAT *s) UNARY_2TYPE_FUNC(dbl, bte, SIGN); break; default: + bat_iterator_end(&bi); BBPunfix(bn->batCacheid); GDKerror("bad input type %s.\n", ATOMname(b->ttype)); return NULL; } + bat_iterator_end(&bi); BATsetcount(bn, ncand); @@ -1045,7 +1061,7 @@ VARcalcsign(ValPtr ret, const ValRecord #define ISNIL_TYPE(TYPE, NOTNIL) \ do { \ - const TYPE *restrict src = (const TYPE *) Tloc(b, 0); \ + const TYPE *restrict src = (const TYPE *) bi.base; \ for (i = 0; i < ncand; i++) { \ x = canditer_next(&ci) - bhseqbase; \ dst[i] = (bit) (is_##TYPE##_nil(src[x]) ^ NOTNIL); \ @@ -1086,6 +1102,7 @@ BATcalcisnil_implementation(BAT *b, BAT dst = (bit *) Tloc(bn, 0); + BATiter bi = bat_iterator(b); switch (ATOMbasetype(b->ttype)) { case TYPE_bte: ISNIL_TYPE(bte, notnil); @@ -1115,7 +1132,6 @@ BATcalcisnil_implementation(BAT *b, BAT break; default: { - BATiter bi = bat_iterator(b); int (*atomcmp)(const void *, const void *) = ATOMcompare(b->ttype); const void *nil = ATOMnilptr(b->ttype); @@ -1123,10 +1139,10 @@ BATcalcisnil_implementation(BAT *b, BAT x = canditer_next(&ci) - bhseqbase; dst[i] = (bit) (((*atomcmp)(BUNtail(bi, x), nil) == 0) ^ notnil); } - bat_iterator_end(&bi); - break; - } - } + break; + } + } + bat_iterator_end(&bi); BATsetcount(bn, ncand); @@ -1182,7 +1198,7 @@ VARcalcisnotnil(ValPtr ret, const ValRec #define MINMAX_TYPE(TYPE, OP) \ do { \ - TYPE *tb1 = Tloc(b1, 0), *tb2 = Tloc(b2, 0), *restrict tbn = Tloc(bn, 0); \ + TYPE *tb1 = b1i.base, *tb2 = b2i.base, *restrict tbn = Tloc(bn, 0); \ if (ci1.tpe == cand_dense && ci2.tpe == cand_dense) { \ for (BUN i = 0; i < ncand; i++) { \ oid x1 = canditer_next_dense(&ci1) - b1hseqbase; \ @@ -1240,6 +1256,8 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA if (bn == NULL) return NULL; + BATiter b1i = bat_iterator(b1); + BATiter b2i = bat_iterator(b2); switch (ATOMbasetype(b1->ttype)) { case TYPE_bte: MINMAX_TYPE(bte, <); @@ -1266,7 +1284,6 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA break; default: { const void *restrict nil = ATOMnilptr(b1->ttype); - BATiter b1i = bat_iterator(b1), b2i = bat_iterator(b2); int (*cmp)(const void *, const void *) = ATOMcompare(b1->ttype); if (ATOMvarsized(b1->ttype)) { @@ -1283,8 +1300,6 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA p1 = cmp(p1, p2) < 0 ? p1 : p2; } if (tfastins_nocheckVAR(bn, i, p1, Tsize(bn)) != GDK_SUCCEED) { - bat_iterator_end(&b1i); - bat_iterator_end(&b2i); goto bunins_failed; } } @@ -1301,8 +1316,6 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA p1 = cmp(p1, p2) < 0 ? p1 : p2; } if (tfastins_nocheckVAR(bn, i, p1, Tsize(bn)) != GDK_SUCCEED) { - bat_iterator_end(&b1i); - bat_iterator_end(&b2i); goto bunins_failed; } } @@ -1342,10 +1355,10 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA } } } - bat_iterator_end(&b1i); - bat_iterator_end(&b2i); - } - } + } + } + bat_iterator_end(&b1i); + bat_iterator_end(&b2i); bn->tnil = nils; bn->tnonil = !nils; @@ -1371,13 +1384,15 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA return bn; bunins_failed: + bat_iterator_end(&b1i); + bat_iterator_end(&b2i); BBPreclaim(bn); return NULL; } #define MINMAX_NONIL_TYPE(TYPE, OP) \ do { \ - TYPE *tb1 = Tloc(b1, 0), *tb2 = Tloc(b2, 0), *restrict tbn = Tloc(bn, 0); \ + TYPE *tb1 = b1i.base, *tb2 = b2i.base, *restrict tbn = Tloc(bn, 0); \ if (ci1.tpe == cand_dense && ci2.tpe == cand_dense) { \ for (BUN i = 0; i < ncand; i++) { \ oid x1 = canditer_next_dense(&ci1) - b1hseqbase; \ @@ -1443,6 +1458,8 @@ BATcalcmin_no_nil(BAT *b1, BAT *b2, BAT if (bn == NULL) return NULL; + BATiter b1i = bat_iterator(b1); + BATiter b2i = bat_iterator(b2); switch (ATOMbasetype(b1->ttype)) { case TYPE_bte: MINMAX_NONIL_TYPE(bte, <); @@ -1469,7 +1486,6 @@ BATcalcmin_no_nil(BAT *b1, BAT *b2, BAT break; default: { const void *restrict nil = ATOMnilptr(b1->ttype); - BATiter b1i = bat_iterator(b1), b2i = bat_iterator(b2); int (*cmp)(const void *, const void *) = ATOMcompare(b1->ttype); if (ATOMvarsized(b1->ttype)) { @@ -1490,8 +1506,6 @@ BATcalcmin_no_nil(BAT *b1, BAT *b2, BAT p1 = cmp(p2, nil) != 0 && cmp(p2, p1) < 0 ? p2 : p1; } if (tfastins_nocheckVAR(bn, i, p1, Tsize(bn)) != GDK_SUCCEED) { - bat_iterator_end(&b1i); - bat_iterator_end(&b2i); goto bunins_failed; } } @@ -1512,8 +1526,6 @@ BATcalcmin_no_nil(BAT *b1, BAT *b2, BAT p1 = cmp(p2, nil) != 0 && cmp(p2, p1) < 0 ? p2 : p1; } if (tfastins_nocheckVAR(bn, i, p1, Tsize(bn)) != GDK_SUCCEED) { - bat_iterator_end(&b1i); - bat_iterator_end(&b2i); goto bunins_failed; } } @@ -1561,10 +1573,10 @@ BATcalcmin_no_nil(BAT *b1, BAT *b2, BAT _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list