Changeset: fe22eeb7284e for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fe22eeb7284e Modified Files: clients/R/Tests/install-dependencies.sh gdk/gdk_bbp.c gdk/gdk_imprints.c sql/backends/monet5/datacell/petrinet.c sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_scenario.h Branch: Oct2014 Log Message:
merged diffs (180 lines): diff --git a/clients/R/Tests/install-dependencies.sh b/clients/R/Tests/install-dependencies.sh --- a/clients/R/Tests/install-dependencies.sh +++ b/clients/R/Tests/install-dependencies.sh @@ -1,2 +1,2 @@ #!/bin/sh -R --vanilla --quiet -e "install.packages(c('dplyr','sqlsurvey','DBI','digest'),repos=c('http://r-forge.r-project.org','http://cran.rstudio.com/'),type='source')" +R --vanilla --quiet -e "install.packages(c('dplyr','survey','sqlsurvey','DBI','digest','Lahman'),repos=c('http://download.r-forge.r-project.org','http://cran.rstudio.com/'),type='source')" diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -1702,6 +1702,47 @@ BBPcurstamp(void) return ATOMIC_GET(BBP_curstamp, BBP_curstampLock, "BBPcurstamp") & 0x7fffffff; } +/* There are BBP_THREADMASK+1 (64) free lists, and ours (idx) is + * empty. Here we find the longest free list, and if it is long + * enough (> 20 entries) we take one entry from that list. If the + * longest list isn't long enough, we create a new entry by either + * just increasing BBPsize (up to BBPlimit) or extending the BBP + * (which increases BBPlimit). */ +static void +maybeextend(int idx) +{ + int t, m; + int n, l; + bat i; + + l = 0; /* length of longest list */ + m = 0; /* index of longest list */ + /* find longest free list */ + for (t = 0; t <= BBP_THREADMASK; t++) { + n = 0; + for (i = BBP_free(t); i != 0; i = BBP_next(i)) + n++; + if (n > l) { + m = t; + l = n; + } + } + if (l > 20) { + /* longest list is long enough, get an entry from there */ + i = BBP_free(m); + BBP_free(m) = BBP_next(i); + BBP_next(i) = 0; + BBP_free(idx) = i; + } else { + /* let the longest list alone, get a fresh entry */ + if ((bat) ATOMIC_ADD(BBPsize, 1, BBPsizeLock, "BBPinsert") >= BBPlimit) { + BBPextend(idx, TRUE); + } else { + BBP_free(idx) = (bat) ATOMIC_GET(BBPsize, BBPsizeLock, "BBPinsert") - 1; + } + } +} + bat BBPinsert(BATstore *bs) { @@ -1738,11 +1779,7 @@ BBPinsert(BATstore *bs) /* check again in case some other thread extended * while we were waiting */ if (BBP_free(idx) <= 0) { - if ((bat) ATOMIC_ADD(BBPsize, 1, BBPsizeLock, "BBPinsert") >= BBPlimit) { - BBPextend(idx, TRUE); - } else { - BBP_free(idx) = (bat) ATOMIC_GET(BBPsize, BBPsizeLock, "BBPinsert") - 1; - } + maybeextend(idx); } MT_lock_unset(&GDKnameLock, "BBPinsert"); if (lock) @@ -1752,7 +1789,7 @@ BBPinsert(BATstore *bs) } i = BBP_free(idx); assert(i > 0); - BBP_free(idx) = BBP_next(BBP_free(idx)); + BBP_free(idx) = BBP_next(i); if (lock) { MT_lock_unset(&GDKcacheLock(idx), "BBPinsert"); diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c --- a/gdk/gdk_imprints.c +++ b/gdk/gdk_imprints.c @@ -412,7 +412,7 @@ do { \ uint##B##_t *im = (uint##B##_t *) imps; \ TYPE *col = (TYPE *) Tloc(b, b->batFirst); \ TYPE *bins = (TYPE *) inbins; \ - TYPE nil = TYPE##_nil; \ + TYPE nil = TYPE##_nil; \ prvmask = mask = 0; \ new = (IMPS_PAGE/sizeof(TYPE))-1; \ for (i = 0; i < b->batCount; i++) { \ @@ -453,23 +453,23 @@ do { \ } \ GETBIN##B(bin,col[i]); \ mask = IMPSsetBit(B,mask,bin); \ - if (!cnt_bins[bin]++) { \ + if (!cnt_bins[bin]++) { \ min_bins[bin] = max_bins[bin] = i; \ - } else { \ + } else { \ /* nil value can not be min */ \ - if ((bin == 0) && (col[i] != nil)) { \ - /* in case the first value was nil and min_bin[0] \ - * has been initialized with it */ \ - if (col[min_bins[0]] == nil) { \ - min_bins[0] = i; \ - } else if (col[i] < col[min_bins[0]]) { \ - min_bins[0] = i; \ - } \ - } else { \ - if (col[i] < col[min_bins[bin]]) min_bins[bin] = i; \ - } \ - if (col[i] > col[max_bins[bin]]) max_bins[bin] = i; \ - } \ + if ((bin == 0) && (col[i] != nil)) { \ + /* in case the first value was nil and min_bin[0] \ + * has been initialized with it */ \ + if (col[min_bins[0]] == nil) { \ + min_bins[0] = i; \ + } else if (col[i] < col[min_bins[0]]) { \ + min_bins[0] = i; \ + } \ + } else { \ + if (col[i] < col[min_bins[bin]]) min_bins[bin] = i; \ + } \ + if (col[i] > col[max_bins[bin]]) max_bins[bin] = i; \ + } \ } \ /* one last left */ \ if (prvmask == mask && dcnt > 0 && \ diff --git a/sql/backends/monet5/datacell/petrinet.c b/sql/backends/monet5/datacell/petrinet.c --- a/sql/backends/monet5/datacell/petrinet.c +++ b/sql/backends/monet5/datacell/petrinet.c @@ -474,7 +474,7 @@ PNcontroller(void *dummy) cntxt = mal_clients; /* run as admin in SQL mode*/ if( strcmp(cntxt->scenario, "sql") ) - SQLinitEnvironment(cntxt); + SQLinitEnvironment(cntxt, NULL, NULL, NULL); /* At this point we know what is the total number of factories. * The most extremely case is when ALL factories are enable to fire * so the maximum space we could ever need is = #factories (=pnettop)*/ diff --git a/sql/backends/monet5/sql_scenario.c b/sql/backends/monet5/sql_scenario.c --- a/sql/backends/monet5/sql_scenario.c +++ b/sql/backends/monet5/sql_scenario.c @@ -1320,8 +1320,11 @@ SQLexitClient(Client c) * execution */ str -SQLinitEnvironment(Client cntxt) +SQLinitEnvironment(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { + (void) mb; + (void) stk; + (void) pci; return SQLinitClient(cntxt); } @@ -1371,7 +1374,7 @@ SQLstatementIntern(Client c, str *expr, mnstr_printf(c->fdout, "#SQLstatement:%s\n", *expr); #endif if (!sql) { - msg = SQLinitEnvironment(c); + msg = SQLinitEnvironment(c, NULL, NULL, NULL); sql = (backend *) c->sqlcontext; } if (msg){ diff --git a/sql/backends/monet5/sql_scenario.h b/sql/backends/monet5/sql_scenario.h --- a/sql/backends/monet5/sql_scenario.h +++ b/sql/backends/monet5/sql_scenario.h @@ -41,7 +41,7 @@ sql5_export str SQLassertInt(Client cntx sql5_export str SQLassertWrd(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str SQLassertLng(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -sql5_export str SQLinitEnvironment(Client cntxt); +sql5_export str SQLinitEnvironment(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str SQLstatement(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str SQLstatementIntern(Client c, str *expr, str nme, int execute, bit output); sql5_export str SQLcompile(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list