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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list