Changeset: 61791360b98f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=61791360b98f
Modified Files:
MonetDB/src/gdk/gdk.mx
MonetDB/src/gdk/gdk_heap.mx
Branch: default
Log Message:
small refactoring to optimize GDKupgradevar..
diffs (87 lines):
diff -r ceddf3abc211 -r 61791360b98f MonetDB/src/gdk/gdk.mx
--- a/MonetDB/src/gdk/gdk.mx Wed Dec 22 20:54:29 2010 +0100
+++ b/MonetDB/src/gdk/gdk.mx Wed Dec 22 20:54:59 2010 +0100
@@ -1301,7 +1301,9 @@
if ((b)->H->width < SIZEOF_VAR_T && \
((b)->H->width <= 2 ? _d - GDK_VAROFFSET : _d) >=
((size_t) 1 << (8 * (b)->H->width))) { \
/* doesn't fit in current heap, upgrade it */ \
+ BATaccessBegin(b, USE_HEAD, MMAP_SEQUENTIAL); \
GDKupgradevarheap((b)->H, _d, (copyall)); \
+ BATaccessEnd(b, USE_HEAD, MMAP_SEQUENTIAL); \
} \
_ptr = (p); \
switch ((b)->H->width) { \
@@ -1330,7 +1332,9 @@
if ((b)->T->width < SIZEOF_VAR_T && \
((b)->T->width <= 2 ? _d - GDK_VAROFFSET : _d) >=
((size_t) 1 << (8 * (b)->T->width))) { \
/* doesn't fit in current heap, upgrade it */ \
+ BATaccessBegin(b, USE_TAIL, MMAP_SEQUENTIAL); \
GDKupgradevarheap((b)->T, _d, (copyall)); \
+ BATaccessEnd(b, USE_TAIL, MMAP_SEQUENTIAL); \
} \
_ptr = (p); \
switch ((b)->T->width) { \
diff -r ceddf3abc211 -r 61791360b98f MonetDB/src/gdk/gdk_heap.mx
--- a/MonetDB/src/gdk/gdk_heap.mx Wed Dec 22 20:54:29 2010 +0100
+++ b/MonetDB/src/gdk/gdk_heap.mx Wed Dec 22 20:54:59 2010 +0100
@@ -313,34 +313,47 @@
#if SIZEOF_VAR_T == 8
pv = (var_t *) c->heap.base + n;
#endif
+
/* convert from back to front so that we can do it in-place */
- for (i = 0; i < n; i++) {
- switch (c->width) {
- case 1:
- v = *--pc + GDK_VAROFFSET;
+ switch (c->width) {
+ case 1:
+ switch (width) {
+ case 2:
+ for (i = 0; i < n; i++)
+ *--ps = *--pc;
break;
- case 2:
- v = *--ps + GDK_VAROFFSET;
+ case 4:
+ for (i = 0; i < n; i++)
+ *--pi = *--pc + GDK_VAROFFSET;
break;
#if SIZEOF_VAR_T == 8
- case 4:
- v = *--pi;
+ case 8:
+ for (i = 0; i < n; i++)
+ *--pv = *--pc + GDK_VAROFFSET;
break;
#endif
}
+ break;
+ case 2:
switch (width) {
- case 2:
- *--ps = (unsigned short) v - GDK_VAROFFSET;
- break;
case 4:
- *--pi = (unsigned int) v;
+ for (i = 0; i < n; i++)
+ *--pi = *--ps + GDK_VAROFFSET;
break;
#if SIZEOF_VAR_T == 8
case 8:
- *--pv = v;
+ for (i = 0; i < n; i++)
+ *--pv = *--ps + GDK_VAROFFSET;
break;
#endif
}
+ break;
+#if SIZEOF_VAR_T == 8
+ case 4:
+ for (i = 0; i < n; i++)
+ *--pv = *--pi;
+ break;
+#endif
}
c->heap.free <<= shift - c->shift;
c->shift = shift;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list