Changeset: 86ff5a1cbc5a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=86ff5a1cbc5a Modified Files: monetdb5/optimizer/CMakeLists.txt monetdb5/optimizer/opt_aliases.c monetdb5/optimizer/opt_pipes.c monetdb5/optimizer/opt_wrapper.c monetdb5/optimizer/optimizer.c monetdb5/optimizer/optimizer.mal Branch: default Log Message:
Another 2% using fast-path implementations of the Default-pipe. diffs (123 lines): diff --git a/monetdb5/optimizer/CMakeLists.txt b/monetdb5/optimizer/CMakeLists.txt --- a/monetdb5/optimizer/CMakeLists.txt +++ b/monetdb5/optimizer/CMakeLists.txt @@ -48,6 +48,7 @@ target_sources(optimizer opt_profiler.c opt_profiler.h opt_postfix.c opt_postfix.h opt_volcano.c opt_volcano.h + opt_fastpath.c opt_fastpath.h opt_wrapper.c PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/opt_pipes.h) diff --git a/monetdb5/optimizer/opt_aliases.c b/monetdb5/optimizer/opt_aliases.c --- a/monetdb5/optimizer/opt_aliases.c +++ b/monetdb5/optimizer/opt_aliases.c @@ -38,6 +38,9 @@ OPTaliasesImplementation(Client cntxt, M if (OPTisAlias(p)) break; } + if( i == limit){ + goto wrapup; + } k = i; if( i < limit){ alias= (int*) GDKzalloc(sizeof(int)* mb->vtop); @@ -78,7 +81,8 @@ OPTaliasesImplementation(Client cntxt, M // msg = chkFlow(mb); // if ( msg == MAL_SUCCEED) // msg = chkDeclarations(mb); - /* keep all actions taken as a post block comment +wrapup: + /* keep all actions taken as a post block comment * and update statics */ usec= GDKusec() - usec; snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " usec","aliases",actions,usec); diff --git a/monetdb5/optimizer/opt_pipes.c b/monetdb5/optimizer/opt_pipes.c --- a/monetdb5/optimizer/opt_pipes.c +++ b/monetdb5/optimizer/opt_pipes.c @@ -53,6 +53,9 @@ static struct PIPELINES { //"optimizer.mask();" "optimizer.garbageCollector();", "stable", NULL, 1}, + {"minimal_fast", + "optimizer.minimalfast()", + "stable", NULL, 1}, /* The default pipe line contains as of Feb2010 * mitosis-mergetable-reorder, aimed at large tables and improved * access locality. @@ -96,6 +99,9 @@ static struct PIPELINES { "optimizer.wlc();" "optimizer.garbageCollector();", "stable", NULL, 1}, + {"default_fast", + "optimizer.defaultfast()", + "stable", NULL, 1}, /* * Optimistic concurreny control in general leads to more transaction failures * in an OLTP setting. The partial solution provided is to give out @@ -408,6 +414,10 @@ validatePipe(MalBlkPtr mb) if (mb == NULL ) throw(MAL, "optimizer.validate", SQLSTATE(42000) "missing optimizer mal block\n"); p = getInstrPtr(mb,1); + + if (getFunctionId(p) && (idcmp(getFunctionId(p), "defaultfast") || (idcmp(getFunctionId(p), "minimalfast")))) + return MAL_SUCCEED; + if (getFunctionId(p) == NULL || idcmp(getFunctionId(p), "inline")) throw(MAL, "optimizer.validate", SQLSTATE(42000) "'inline' should be the first\n"); diff --git a/monetdb5/optimizer/opt_wrapper.c b/monetdb5/optimizer/opt_wrapper.c --- a/monetdb5/optimizer/opt_wrapper.c +++ b/monetdb5/optimizer/opt_wrapper.c @@ -52,6 +52,7 @@ #include "opt_remoteQueries.h" #include "opt_reorder.h" #include "opt_volcano.h" +#include "opt_fastpath.h" #include "opt_wlc.h" #include "optimizer_private.h" @@ -61,6 +62,8 @@ struct{ int calls; lng timing; } codes[] = { + {"defaultfast", &OPTdefaultfastImplementation,0,0}, + {"minimalfast", &OPTminimalfastImplementation,0,0}, {"aliases", &OPTaliasesImplementation,0,0}, {"bincopyfrom", &OPTbincopyfromImplementation,0,0}, {"candidates", &OPTcandidatesImplementation,0,0}, diff --git a/monetdb5/optimizer/optimizer.c b/monetdb5/optimizer/optimizer.c --- a/monetdb5/optimizer/optimizer.c +++ b/monetdb5/optimizer/optimizer.c @@ -105,6 +105,8 @@ static mel_func optimizer_init_funcs[] = optwrapper_pattern("garbageCollector", "Garbage collector optimizer"), optwrapper_pattern("generator", "Sequence generator optimizer"), optwrapper_pattern("querylog", "Collect SQL query statistics"), + optwrapper_pattern("minimalfast", "Fast compound minimal optimizer pipe"), + optwrapper_pattern("defaultfast", "Fast compound default optimizer pipe"), pattern("optimizer", "prelude", optimizer_prelude, false, "Initialize the optimizer", noargs), command("optimizer", "epilogue", optimizer_epilogue, false, "release the resources held by the optimizer module", args(1,1, arg("",void))), pattern("optimizer", "optimize", QOToptimize, false, "Optimize a specific operation", args(0,2, arg("mod",str),arg("fcn",str))), diff --git a/monetdb5/optimizer/optimizer.mal b/monetdb5/optimizer/optimizer.mal --- a/monetdb5/optimizer/optimizer.mal +++ b/monetdb5/optimizer/optimizer.mal @@ -284,3 +284,19 @@ address OPTwrapper; pattern optimizer.postfix(mod:str, fcn:str):str address OPTwrapper comment "Postfix the plan,e.g. pushing projections"; + +#opt_minimalfast.mal + +pattern optimizer.minimalfast():str +address OPTwrapper; +pattern optimizer.minimalfast(mod:str, fcn:str):str +address OPTwrapper +comment "Combined optimizer pipeline"; + +#opt_defaultfast.mal + +pattern optimizer.defaultfast():str +address OPTwrapper; +pattern optimizer.defaultfast(mod:str, fcn:str):str +address OPTwrapper +comment "Combined optimizer pipeline"; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list