static str addOptimizers(Client c, MalBlkPtr mb, char *pipe, int prepare) { int i; InstrPtr q; backend *be; str msg= MAL_SUCCEED; be = (backend *) c->sqlcontext; assert(be && be->mvc); /* SQL clients should always have their state set */ (void) SQLgetSpace(be->mvc, mb, prepare); // detect empty bats. /* The volcano optimizer seems relevant for traditional HDD settings. * It produced about 8 % improvement onf TPCH SF 100 on a 16G machine. * In a SSD setting it was counter productive, leading to worse parallel behavior. * The automatic switch to volcano is now disabled assuming more use of SSD. * The volcano optimizer pipeline can be used instead if(space && (pipe == NULL || strcmp(pipe,"default_pipe")== 0)){ if( space > (lng)(0.8 * MT_npages() * MT_pagesize()) && GDKnr_threads > 1){ pipe = "volcano_pipe"; //mnstr_printf(GDKout, "#use volcano optimizer pipeline? %zu\n", space); }else pipe = "default_pipe"; } else */ pipe = pipe? pipe: "default_pipe"; msg = addOptimizerPipe(c, mb, pipe); if (msg){ return msg; } mb->keephistory |= be->mvc->emod & mod_debug; if (be->mvc->no_mitosis) { for (i = mb->stop - 1; i > 0; i--) { q = getInstrPtr(mb, i); if (q->token == ENDsymbol) break; if (getFunctionId(q) == mitosisRef || getFunctionId(q) == dataflowRef) q->token = REMsymbol; /* they are ignored */ } } addtoMalBlkHistory(mb); return msg; }
void addOptimizers(Client c, MalBlkPtr mb, char *pipe) { int i; InstrPtr q; backend *be; str msg; lng space; be = (backend *) c->sqlcontext; assert(be && be->mvc); /* SQL clients should always have their state set */ space = SQLgetSpace(be->mvc, mb); if(space && (pipe == NULL || strcmp(pipe,"default_pipe")== 0)){ if( space > (lng)(0.8 * MT_npages() * MT_pagesize()) && GDKnr_threads > 1){ pipe = "volcano_pipe"; //mnstr_printf(GDKout, "#use volcano optimizer pipeline? "SZFMT"\n", space); }else pipe = "default_pipe"; } else pipe = pipe? pipe: "default_pipe"; msg = addOptimizerPipe(c, mb, pipe); if (msg) GDKfree(msg); /* what to do with an error? */ if (be->mvc->no_mitosis) { for (i = mb->stop - 1; i > 0; i--) { q = getInstrPtr(mb, i); if (q->token == ENDsymbol) break; if (getFunctionId(q) == mitosisRef || getFunctionId(q) == dataflowRef) q->token = REMsymbol; /* they are ignored */ } } if (be->mvc->emod & mod_debug) addtoMalBlkHistory(mb, "getStatistics"); }