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

Reply via email to