RFDiagonalAlgorithmWK::RFDiagonalAlgorithmWK(RFResultsListener* rl, const char* seqX, int sizeX, const char* seqY, int sizeY, DNAAlphabetType seqType, int w, int k) : RFAlgorithmBase(rl, seqX, sizeX, seqY, sizeY, seqType, w, k) { setMaxParallelSubtasks(MAX_PARALLEL_SUBTASKS_AUTO); START_DIAG = SIZE_X - WINDOW_SIZE; END_DIAG = reflective ? 1 : -int(SIZE_Y - WINDOW_SIZE); }
void HMMCalibrateParallelTask::prepare() { TaskLocalData::createHMMContext(getTaskId(), false); initTask = new HMMCreateWPoolTask(this); addSubTask(initTask); for(int i=0;i < settings.nThreads;i++){ addSubTask(new HMMCalibrateParallelSubTask(this)); } setMaxParallelSubtasks(1); }
void GenomeAlignerFindTask::prepare() { alignerTaskCount = alignContext->openCL ? 1 : AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount(); if (alignContext->openCL) { Task *subTask = new ShortReadAlignerOpenCL(0, index, alignContext, writeTask); subTask->setSubtaskProgressWeight(1.0f); addSubTask(subTask); } else { setMaxParallelSubtasks(alignerTaskCount); for (int i = 0; i < alignerTaskCount; i++) { Task *subTask = new ShortReadAlignerCPU(i, index, alignContext, writeTask); subTask->setSubtaskProgressWeight(1.0f / alignerTaskCount); addSubTask(subTask); } } }
MuscleTask::MuscleTask(const MultipleSequenceAlignment &ma, const MuscleTaskSettings& _config) : Task(tr("MUSCLE alignment"), TaskFlags_FOSCOE | TaskFlag_MinimizeSubtaskErrorText), config(_config), inputMA(ma->getExplicitCopy()) { GCOUNTER( cvar, tvar, "MuscleTask" ); config.nThreads = (config.nThreads == 0 ? AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount() : config.nThreads); SAFE_POINT_EXT(config.nThreads > 0, setError("Incorrect number of max parallel subtasks"), ); setMaxParallelSubtasks(config.nThreads); algoLog.info(tr("MUSCLE alignment started")); ctx = new MuscleContext(config.nThreads); ctx->params.g_bStable = config.stableMode; ctx->params.g_uMaxIters = config.maxIterations; ctx->params.g_ulMaxSecs = config.maxSecs; parallelSubTask = NULL; //todo: make more precise estimation, use config.op mode int aliLen = ma->getLength(); int nSeq = ma->getNumRows(); int memUseMB = qint64(aliLen) * qint64(nSeq) * 200 / (1024 * 1024); //200x per char in alignment TaskResourceUsage tru(RESOURCE_MEMORY, memUseMB); QString inputAlName = inputMA->getName(); resultMA->setName(inputAlName); resultSubMA->setName(inputAlName); inputSubMA = inputMA->getExplicitCopy(); if (config.alignRegion && config.regionToAlign.length != inputMA->getLength()) { SAFE_POINT_EXT(config.regionToAlign.length > 0, setError(tr("Incorrect region to align")), ); inputSubMA = inputMA->mid(config.regionToAlign.startPos, config.regionToAlign.length); CHECK_EXT(inputSubMA != MultipleSequenceAlignment(), setError(tr("Stopping MUSCLE task, because of error in MultipleSequenceAlignment::mid function")), ); }
QList<Task*> HMMCalibrateParallelTask::onSubTaskFinished(Task* subTask) { if (subTask == initTask) { setMaxParallelSubtasks(settings.nThreads); } return QList<Task*>(); }