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