Changeset: d944146a71ef for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d944146a71ef
Modified Files:
        monetdb5/modules/mal/language.c
        monetdb5/modules/mal/language.h
        monetdb5/modules/mal/language.mal
Branch: Feb2013
Log Message:

Introduce a sink point for parallel processing
When a variable is used multiple times in a dataflow block,
we have to ensure that its garbage collection action is not
interfering with concurrent ongoing use.

This is supported and tested in the dataflow scheduler
by postponing execution of the last instruction in such a block.
This may cause a significant delay as a complete subquery could
be triggered.

A more elegant way is to inject sink() operations, which
are no-ops with side effects. Its argument list enumerates
all variables that can/should be released together.
[A side effect is that intermediates may hang around too long,
can be handled with a sink prepare instruction.TBD]


diffs (49 lines):

diff --git a/monetdb5/modules/mal/language.c b/monetdb5/modules/mal/language.c
--- a/monetdb5/modules/mal/language.c
+++ b/monetdb5/modules/mal/language.c
@@ -138,6 +138,19 @@ MALstartDataflow( Client cntxt, MalBlkPt
        return msg;
 }
 
+/*
+ * Garbage collection over variables can be postponed by grouping
+ * all dependent ones in a single sink() instruction.
+ */
+str
+MALgarbagesink( Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       (void) cntxt;
+       (void) mb;
+       (void) stk;
+       (void) pci;
+       return MAL_SUCCEED;
+}
 
 str 
 CMDregisterFunction(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
diff --git a/monetdb5/modules/mal/language.h b/monetdb5/modules/mal/language.h
--- a/monetdb5/modules/mal/language.h
+++ b/monetdb5/modules/mal/language.h
@@ -47,6 +47,7 @@ language_export str MALassertSht(int *re
 language_export str MALassertInt(int *ret, int *val, str *msg);
 language_export str MALassertLng(int *ret, lng *val, str *msg);
 language_export str MALstartDataflow( Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
+language_export str MALgarbagesink( Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 language_export str CMDregisterFunction(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
 language_export str CMDsetMemoryTrace(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
 language_export str CMDsetThreadTrace(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
diff --git a/monetdb5/modules/mal/language.mal 
b/monetdb5/modules/mal/language.mal
--- a/monetdb5/modules/mal/language.mal
+++ b/monetdb5/modules/mal/language.mal
@@ -34,6 +34,11 @@ pattern dataflow():bit
 address MALstartDataflow
 comment "The current guarded block is executed using dataflow control. ";
 
+pattern sink(v:any...):void
+address MALgarbagesink
+comment "Variables to be considered together when triggering garbage 
collection.
+Used in the dataflow blocks to avoid early release of values.";
+
 pattern register(m:str,f:str,code:str,help:str):void
 address CMDregisterFunction
 comment"Compile the code string to MAL and register it as a function.";
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to