LogicInfo logicInfo = d_smts[0]->getLogicInfo();
logicInfo.lock();
if(logicInfo.isQuantified()) {
- return CommandExecutor::doCommandSingleton(cmd);
+ if(d_options[options::fallbackSequential])
+ return CommandExecutor::doCommandSingleton(cmd);
+ else
+ throw Exception("Quantified formulas are (currenltly) unsupported in portfolio mode.\n"
+ "Please see option --fallback-sequential to make this a soft error.");
}
d_seq->addCommand(cmd->clone());
try {
seqs[i] = d_seq->exportTo(d_exprMgrs[i], *(d_vmaps[i]) );
}catch(ExportUnsupportedException& e){
- return CommandExecutor::doCommandSingleton(cmd);
+ if(d_options[options::fallbackSequential])
+ return CommandExecutor::doCommandSingleton(cmd);
+ else
+ throw Exception("Certain theories (e.g., datatypes) are (currently) unsupported in portfolio\n"
+ "mode. Please see option --fallback-sequential to make this a soft error.");
}
}
return portfolioReturn.second;
} else if(mode == 2) {
- return smtEngineInvoke(d_smts[d_lastWinner],
- cmd,
- d_threadOptions[d_lastWinner][options::out]);
+ Command* cmdExported =
+ d_lastWinner == 0 ?
+ cmd : cmd->exportTo(d_exprMgrs[d_lastWinner], *(d_vmaps[d_lastWinner]) );
+ int ret = smtEngineInvoke(d_smts[d_lastWinner],
+ cmdExported,
+ d_threadOptions[d_lastWinner][options::out]);
+ if(d_lastWinner != 0) delete cmdExported;
+ return ret;
} else {
// Unreachable();
assert(false);
do not run destructors at exit; default on except in debug builds
# portfolio options
-option printWinner bool
- enable printing the winning thread (pcvc4 only)
option threads --threads=N unsigned :default 2 :predicate greater(0)
Total number of threads for portfolio
option - --threadN=string void :handler CVC4::main::threadN :handler-include "main/options_handlers.h"
In multi-threaded setting print output of each thread at the end of run, separated by a divider ("----").
option sharingFilterByLength --filter-lemma-length=N int :default -1 :read-write
don't share (among portfolio threads) lemmas strictly longer than N
+option fallbackSequential --fallback-sequential bool :default false
+ Switch to sequential mode (instead of printing an error) if it can't be solved in portfolio mode
expert-option waitToJoin --wait-to-join bool :default true
wait for other threads to join before quitting
int counter = 0;
for( size_t i=0; i<fp[0].getNumChildren(); i++ ){
Node icp = d_qe->getTermDatabase()->getInstantiationConstant( fp, i );
- if( counter<f[0].getNumChildren() ){
+ if( (int)counter< (int)f[0].getNumChildren() ){
if( fp[0][i]==f[0][counter] ){
Node ic = d_qe->getTermDatabase()->getInstantiationConstant( f, counter );
Node n = m.getValue( ic );