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