Changeset: 3d40a99fd587 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3d40a99fd587
Modified Files:
gdk/gdk_join.c
Branch: default
Log Message:
Speed up hashjoin on uuid by inlining.
diffs (55 lines):
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -2388,6 +2388,14 @@ mergejoin(BAT **r1p, BAT **r2p, BAT *l,
nr++; \
} while (false)
+#define EQ_int(a, b) ((a) == (b))
+#define EQ_lng(a, b) ((a) == (b))
+#ifdef HAVE_HGE
+#define EQ_uuid(a, b) ((a).h == (b).h)
+#else
+#define EQ_uuid(a, b) (memcmp((a).u, (b).u, UUID_SIZE) == 0)
+#endif
+
#define HASHJOIN(TYPE) \
do { \
TYPE *rvals = Tloc(r, 0); \
@@ -2408,7 +2416,7 @@ mergejoin(BAT **r1p, BAT **r2p, BAT *l,
rb != HASHnil(hsh); \
rb = HASHgetlink(hsh, rb)) { \
ro = canditer_idx(rci, rb); \
- if (v != rvals[ro - r->hseqbase]) \
+ if (!EQ_##TYPE(v, rvals[ro -
r->hseqbase])) \
continue; \
if (only_misses) { \
nr++; \
@@ -2423,7 +2431,7 @@ mergejoin(BAT **r1p, BAT **r2p, BAT *l,
rb != HASHnil(hsh); \
rb = HASHgetlink(hsh, rb)) { \
if (rb >= rl && rb < rh && \
- v == rvals[rb] && \
+ EQ_##TYPE(v, rvals[rb]) && \
canditer_contains(rci, ro = (oid)
(rb - roff + rseq))) { \
if (only_misses) { \
nr++; \
@@ -2439,7 +2447,7 @@ mergejoin(BAT **r1p, BAT **r2p, BAT *l,
rb != HASHnil(hsh); \
rb = HASHgetlink(hsh, rb)) { \
if (rb >= rl && rb < rh && \
- v == rvals[rb]) { \
+ EQ_##TYPE(v, rvals[rb])) { \
if (only_misses) { \
nr++; \
break; \
@@ -2666,6 +2674,9 @@ hashjoin(BAT **r1p, BAT **r2p, BAT *l, B
case TYPE_lng:
HASHJOIN(lng);
break;
+ case TYPE_uuid:
+ HASHJOIN(uuid);
+ break;
default:
while (lci->next < lci->ncand) {
lo = canditer_next(lci);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list