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

Reply via email to