From: <si...@us...> - 2011-06-29 21:34:52
|
Revision: 4242 http://simupop.svn.sourceforge.net/simupop/?rev=4242&view=rev Author: simupop Date: 2011-06-29 21:34:43 +0000 (Wed, 29 Jun 2011) Log Message: ----------- Merge the openMP branch to trunk Modified Paths: -------------- trunk/setup.py trunk/src/customizedTypes.c trunk/src/individual.h trunk/src/initializer.cpp trunk/src/mating.cpp trunk/src/mating.h trunk/src/migrator.cpp trunk/src/penetrance.cpp trunk/src/penetrance.h trunk/src/population.cpp trunk/src/selector.cpp trunk/src/selector.h trunk/src/stator.cpp trunk/src/transmitter.cpp trunk/src/transmitter.h trunk/src/utility.cpp trunk/src/utility.h trunk/test/performance.csv trunk/test/performance.log trunk/test/performance.py trunk/test/test_03_operator.py Property Changed: ---------------- trunk/ Property changes on: trunk ___________________________________________________________________ Modified: svn:mergeinfo - /branches/openMP:3999-4205 + /branches/openMP:3999-4241 Modified: trunk/setup.py =================================================================== --- trunk/setup.py 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/setup.py 2011-06-29 21:34:43 UTC (rev 4242) @@ -41,13 +41,22 @@ """ import os, sys, platform, shutil, glob, re, tempfile, subprocess import distutils.sysconfig +USE_DISTRIBUTE = False +try: + from distribute_setup import use_setuptools + use_setuptools() + from setuptools import setup, find_packages, Extension + USE_DISTRIBUTE = True +except ImportError: + from distutils.core import setup, Extension + print("fail to import distribute/setuptools, build the program with distutils") if sys.version_info[0] <= 2 and sys.version_info[1] <= 4: print("simuPOP supports Python version 2.5 or higher, including Python 3.x. Please upgrade your Python installation and try again.") sys.exit(1) # Change this to False if you would like to compile simuPOP without openMP support -USE_OPENMP = True +USE_OPENMP = False if os.name == 'nt': VS9PATH = os.environ.get('VS90COMNTOOLS') @@ -113,7 +122,6 @@ # ############################################################################ -from distutils.core import setup, Extension from distutils.sysconfig import get_config_var try: from distutils.command.build_py import build_py_2to3 as build_py @@ -468,7 +476,7 @@ else: res['libraries'] = ['stdc++', 'z'] if USE_OPENMP: - res['libraries'].append('iomp5' if USE_ICC else 'gomp') + res['libraries'].append(['iomp5','tbb'] if USE_ICC else 'gomp') res['libraries'].extend(boost_lib_names) res['include_dirs'] = ['.', 'gsl', boost_inc_path] res['library_dirs'] = ['build'] @@ -506,6 +514,10 @@ # this one disables a lot of warnings about VC Checked iterators. #('_SCL_SECURE_NO_WARNINGS', None) ]) + else: + if not USE_ICC: + if USE_OPENMP: + res['define_macros'].append(('_GLIBCXX_PARALLEL', None)) res['undef_macros'] = [] return res @@ -515,6 +527,8 @@ # Build extensions # ############################################################################ +import filecmp + if os.name == 'nt': # Windows # copy platform dependent dll files machine = platform.uname()[4].lower() @@ -571,8 +585,8 @@ os.mkdir('build/%s' % modu) for src in SOURCE_FILES: mod_src = 'build/%s/%s' % (modu, src) - shutil.copy('src/' + src, mod_src) - copied_files.append(mod_src) + if not os.path.isfile(mod_src) or not filecmp.cmp(mod_src,'src/'+src): + shutil.copy('src/'+src, mod_src) # build # For module simuPOP.gsl EXT_MODULES = [ @@ -595,6 +609,13 @@ undef_macros = info['undef_macros'], ) ) + if USE_DISTRIBUTE : + setup_params = dict(packages = find_packages(), include_package_data = True, + exclude_package_data = {'':['README.txt']}, zip_safe = False, + install_requires = ['distribute']) + else : + setup_params = dict(packages = ['simuPOP']) + setup( name = "simuPOP", version = SIMUPOP_VER, @@ -621,7 +642,6 @@ ], platforms = ['all'], # - packages = ['simuPOP'], package_dir = {'simuPOP': 'src'}, package_data = {'simuPOP': PACKAGE_DATA}, py_modules = [ @@ -633,10 +653,9 @@ 'simuPOP.sandbox', ] + ['simuPOP.simuPOP_%s' % x for x in MODULES], ext_modules = EXT_MODULES, - cmdclass = {'build_py': build_py} + cmdclass = {'build_py': build_py}, + **setup_params ) - # remove copied files - for file in copied_files: - os.remove(file) + Modified: trunk/src/customizedTypes.c =================================================================== --- trunk/src/customizedTypes.c 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/customizedTypes.c 2011-06-29 21:34:43 UTC (rev 4242) @@ -1395,11 +1395,17 @@ } else if (PySlice_Check(item)) { Py_ssize_t start, stop, step, slicelength; - +#if PY_VERSION_HEX >= 0x03020000 + if (PySlice_GetIndicesEx((PyObject*)item, Py_SIZE(self), + &start, &stop, &step, &slicelength) < 0) { + return NULL; + } +#else if (PySlice_GetIndicesEx((PySliceObject*)item, Py_SIZE(self), &start, &stop, &step, &slicelength) < 0) { return NULL; } +#endif if (step > 1) { PyErr_SetString(PyExc_TypeError, "Slice with step > 1 is not supported for type simuPOP.array"); @@ -1448,11 +1454,19 @@ return setarrayitem(self, i, value); } else if (PySlice_Check(item)) { +#if PY_VERSION_HEX >= 0x03020000 + if (PySlice_GetIndicesEx((PyObject *)item, + Py_SIZE(self), &start, &stop, + &step, &slicelength) < 0) { + return -1; + } +#else if (PySlice_GetIndicesEx((PySliceObject *)item, Py_SIZE(self), &start, &stop, &step, &slicelength) < 0) { return -1; } +#endif } else { PyErr_SetString(PyExc_TypeError, Modified: trunk/src/individual.h =================================================================== --- trunk/src/individual.h 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/individual.h 2011-06-29 21:34:43 UTC (rev 4242) @@ -515,7 +515,7 @@ indCompare(const vectoru & idx) : m_fields(idx) {} - bool operator()(const Individual & lhs, const Individual & rhs) + bool operator()(const Individual & lhs, const Individual & rhs) const { for (size_t i = 0; i < m_fields.size(); ++i) { double v1 = lhs.info(m_fields[i]); Modified: trunk/src/initializer.cpp =================================================================== --- trunk/src/initializer.cpp 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/initializer.cpp 2011-06-29 21:34:43 UTC (rev 4242) @@ -70,12 +70,14 @@ ind->setSex(m_sex[idx % sexSz] == 1 ? MALE : FEMALE); else { if (numThreads() > 1) { +#ifdef _OPENMP #pragma omp parallel private(ind) { ind = pop.indIterator(sp->subPop(), omp_get_thread_num()); for (; ind.valid(); ++ind) ind->setSex(ws.draw() == 0 ? MALE : FEMALE); } +#endif } else for (; ind.valid(); ++ind) ind->setSex(ws.draw() == 0 ? MALE : FEMALE); Modified: trunk/src/mating.cpp =================================================================== --- trunk/src/mating.cpp 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/mating.cpp 2011-06-29 21:34:43 UTC (rev 4242) @@ -627,7 +627,7 @@ DBG_ASSERT(m_ind.valid(), RuntimeError, "No valid individual if found.") } return ParentChooser::IndividualPair(&*m_ind++, NULL); - }else { + } else { if (m_curInd == m_index.size()) m_curInd = 0; @@ -1270,7 +1270,6 @@ // scrtach will have the right structure. if (!prepareScratchPop(pop, scratch)) return false; - for (size_t sp = 0; sp < static_cast<size_t>(pop.numSubPop()); ++sp) if (!mateSubPop(pop, scratch, sp, scratch.rawIndBegin(sp), scratch.rawIndEnd(sp))) return false; @@ -1431,46 +1430,64 @@ for (; it != it_end; ++it) idMap[toID(it->info(idIdx))] = &*it; - it = scratch.rawIndBegin(); - it_end = scratch.rawIndEnd(); - for (size_t i = 0; it != it_end; ++it, ++i) { - const Individual & pedInd = m_ped.individual(static_cast<double>(i)); + // initialize operator before entering parallel region in order to avoid race condition + opList::const_iterator iop = m_transmitters.begin(); + opList::const_iterator iopEnd = m_transmitters.end(); + for (; iop != iopEnd; ++iop) + (*iop)->initializeIfNeeded(*pop.rawIndBegin()); - size_t my_id = toID(pedInd.info(m_ped.idIdx())); - size_t father_id = m_ped.fatherOf(my_id); - size_t mother_id = m_ped.motherOf(my_id); - Individual * dad = NULL; - Individual * mom = NULL; +#pragma omp parallel private(it, it_end) if (numThreads() > 1 && parallelizable()) + { +#ifdef _OPENMP + size_t id = omp_get_thread_num(); + size_t offPopSize = scratch.rawIndEnd() - scratch.rawIndBegin(); + it = scratch.rawIndBegin() + id * (offPopSize / numThreads()); + it_end = id == numThreads() - 1 ? scratch.rawIndEnd() : it + (offPopSize / numThreads()); + size_t i = id * (offPopSize / numThreads()); +#else + it = scratch.rawIndBegin(); + it_end = scratch.rawIndEnd(); + size_t i = 0; +#endif + for (; it != it_end; ++it, ++i) { + const Individual & pedInd = m_ped.individual(static_cast<double>(i)); - if (father_id) { - IdMap::iterator dad_it = idMap.find(father_id); - DBG_FAILIF(dad_it == idMap.end(), RuntimeError, - "Could not locate individual with ID " + toStr(father_id)); - dad = &*(dad_it->second); - } - if (mother_id) { - IdMap::iterator mom_it = idMap.find(mother_id); - DBG_FAILIF(mom_it == idMap.end(), RuntimeError, - "Could not locate individual with ID " + toStr(mother_id)); - mom = &*(mom_it->second); - } - DBG_DO(DBG_MATING, cerr << "Choosing parents " << father_id << " and " - << mother_id << " for offspring " << my_id << endl); + size_t my_id = toID(pedInd.info(m_ped.idIdx())); + size_t father_id = m_ped.fatherOf(my_id); + size_t mother_id = m_ped.motherOf(my_id); + Individual * dad = NULL; + Individual * mom = NULL; - // copy sex - it->setSex(pedInd.sex()); - // copy id - it->setInfo(static_cast<double>(my_id), m_idField); - // - opList::const_iterator iop = m_transmitters.begin(); - opList::const_iterator iopEnd = m_transmitters.end(); - for (; iop != iopEnd; ++iop) { - if ((*iop)->isActive(pop.rep(), pop.gen())) - (*iop)->applyDuringMating(pop, scratch, it, dad, mom); + if (father_id) { + IdMap::iterator dad_it = idMap.find(father_id); + DBG_FAILIF(dad_it == idMap.end(), RuntimeError, + "Could not locate individual with ID " + toStr(father_id)); + dad = &*(dad_it->second); + } + if (mother_id) { + IdMap::iterator mom_it = idMap.find(mother_id); + DBG_FAILIF(mom_it == idMap.end(), RuntimeError, + "Could not locate individual with ID " + toStr(mother_id)); + mom = &*(mom_it->second); + } + DBG_DO(DBG_MATING, cerr << "Choosing parents " << father_id << " and " + << mother_id << " for offspring " << my_id << endl); + + // copy sex + it->setSex(pedInd.sex()); + // copy id + it->setInfo(static_cast<double>(my_id), m_idField); + // + opList::const_iterator iop = m_transmitters.begin(); + opList::const_iterator iopEnd = m_transmitters.end(); + for (; iop != iopEnd; ++iop) { + if ((*iop)->isActive(pop.rep(), pop.gen())) + (*iop)->applyDuringMating(pop, scratch, it, dad, mom); + } + // copy individual ID again, just to make sure that even if during mating operators + // changes ID, pedigree mating could proceed normally. + it->setInfo(static_cast<double>(my_id), m_idField); } - // copy individual ID again, just to make sure that even if during mating operators - // changes ID, pedigree mating could proceed normally. - it->setInfo(static_cast<double>(my_id), m_idField); } const_cast<Pedigree &>(m_ped).useAncestralGen(oldGen); submitScratch(pop, scratch); @@ -1492,6 +1509,19 @@ } +bool PedigreeMating::parallelizable() const +{ + opList::const_iterator iop = m_transmitters.begin(); + opList::const_iterator iopEnd = m_transmitters.end(); + + for (; iop != iopEnd; ++iop) { + if (!(*iop)->parallelizable()) + return false; + } + return true; +} + + HeteroMating::HeteroMating(const vectormating & matingSchemes, const uintListFunc & subPopSize, bool shuffleOffspring) Modified: trunk/src/mating.h =================================================================== --- trunk/src/mating.h 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/mating.h 2011-06-29 21:34:43 UTC (rev 4242) @@ -1293,12 +1293,14 @@ return "<simuPOP.CombinedParentsChooser> chooses parents using two parent choosers"; } + /// CPPONLY virtual bool parallelizable() const { return m_fatherChooser->parallelizable() && m_motherChooser->parallelizable(); } + /// CPPONLY void initialize(Population & pop, size_t sp); @@ -1639,6 +1641,8 @@ */ virtual bool mate(Population & pop, Population & scratch); + bool parallelizable() const; + private: const Pedigree & m_ped; Modified: trunk/src/migrator.cpp =================================================================== --- trunk/src/migrator.cpp 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/migrator.cpp 2011-06-29 21:34:43 UTC (rev 4242) @@ -70,9 +70,24 @@ for (size_t sp = 0; sp < pop.numSubPop(); ++sp) { RawIndIterator it = pop.rawIndBegin(sp); RawIndIterator it_end = pop.rawIndEnd(sp); - for (; it != it_end; ++it) - it->setInfo(static_cast<double>(sp), info); + if (numThreads() > 1) { +#ifdef _OPENMP + size_t popSize = it_end - it; +# pragma omp parallel firstprivate(it, it_end) + { + size_t id = omp_get_thread_num(); + it = it + id * (popSize / numThreads()); + it_end = id == numThreads() - 1 ? it_end : it + popSize / numThreads(); + for (; it != it_end; ++it) + it->setInfo(static_cast<double>(sp), info); + } +#endif + } else { + for (; it != it_end; ++it) + it->setInfo(static_cast<double>(sp), info); + } } + } DBG_FAILIF(pop.hasActivatedVirtualSubPop(), RuntimeError, @@ -150,26 +165,51 @@ // restore information fields set by user so that other individuals // can stay at their original subpopulation. if (!oldInfo.empty()) { - for (IndIterator ind = pop.indIterator(spFrom); ind.valid(); ++ind) - ind->setInfo(oldInfo[&*ind - &*pop.rawIndBegin()], info); + if (numThreads() > 1) { +#ifdef _OPENMP +# pragma omp parallel + { + for (IndIterator ind = pop.indIterator(spFrom, omp_get_thread_num()); ind.valid(); ++ind) + ind->setInfo(oldInfo[&*ind - &*pop.rawIndBegin()], info); + } +#endif + } else { + for (IndIterator ind = pop.indIterator(spFrom); ind.valid(); ++ind) + ind->setInfo(oldInfo[&*ind - &*pop.rawIndBegin()], info); + } } } else if (m_mode == BY_PROBABILITY) { WeightedSampler ws(migrationRate[from]); // for each individual, migrate according to migration probability - for (IndIterator ind = pop.indIterator(spFrom); ind.valid(); ++ind) { - //toIndex = getRNG().randIntByFreq( rateSize, &migrationRate[from][0] ) ; - toIndex = ws.draw(); + if (numThreads() > 1) { +#ifdef _OPENMP +# pragma omp parallel private(toIndex) + { + for (IndIterator ind = pop.indIterator(spFrom, omp_get_thread_num()); ind.valid(); ++ind) { + toIndex = ws.draw(); + DBG_ASSERT(toIndex < migrationRate[from].size(), ValueError, + "Return index out of range."); + if (toIndex < toSize && toSubPops[toIndex] != spFrom) + ind->setInfo(static_cast<double>(toSubPops[toIndex]), info); + } + } +#endif + } else { + for (IndIterator ind = pop.indIterator(spFrom); ind.valid(); ++ind) { + //toIndex = getRNG().randIntByFreq( rateSize, &migrationRate[from][0] ) ; + toIndex = ws.draw(); - DBG_ASSERT(toIndex < migrationRate[from].size(), ValueError, - "Return index out of range."); + DBG_ASSERT(toIndex < migrationRate[from].size(), ValueError, + "Return index out of range."); - // rateSize == toSize (no i->i addition) - // toIndex < toSize - // rateSize = toSize + 1, ignore i->1 (last one) - // toIndex < toSize - if (toIndex < toSize && toSubPops[toIndex] != spFrom) - ind->setInfo(static_cast<double>(toSubPops[toIndex]), info); + // rateSize == toSize (no i->i addition) + // toIndex < toSize + // rateSize = toSize + 1, ignore i->1 (last one) + // toIndex < toSize + if (toIndex < toSize && toSubPops[toIndex] != spFrom) + ind->setInfo(static_cast<double>(toSubPops[toIndex]), info); + } } } else { // 2nd, or 3rd method Modified: trunk/src/penetrance.cpp =================================================================== --- trunk/src/penetrance.cpp 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/penetrance.cpp 2011-06-29 21:34:43 UTC (rev 4242) @@ -60,17 +60,37 @@ if (sp->isVirtual()) pop.activateVirtualSubPop(*sp); - IndIterator ind = pop.indIterator(sp->subPop()); - for (; ind.valid(); ++ind) { - double p = penet(&pop, &*ind); + if (numThreads() > 1 && parallelizable()) { +#pragma omp parallel + { +#ifdef _OPENMP + IndIterator ind = pop.indIterator(sp->subPop(), omp_get_thread_num()); + for (; ind.valid(); ++ind) { + double p = penet(&pop, &*ind); - if (savePene) - ind->setInfo(p, infoIdx); + if (savePene) + ind->setInfo(p, infoIdx); - if (getRNG().randUniform() < p) - ind->setAffected(true); - else - ind->setAffected(false); + if (getRNG().randUniform() < p) + ind->setAffected(true); + else + ind->setAffected(false); + } +#endif + } + } else { + IndIterator ind = pop.indIterator(sp->subPop()); + for (; ind.valid(); ++ind) { + double p = penet(&pop, &*ind); + + if (savePene) + ind->setInfo(p, infoIdx); + + if (getRNG().randUniform() < p) + ind->setAffected(true); + else + ind->setAffected(false); + } } if (sp->isVirtual()) pop.deactivateVirtualSubPop(sp->subPop()); Modified: trunk/src/penetrance.h =================================================================== --- trunk/src/penetrance.h 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/penetrance.h 2011-06-29 21:34:43 UTC (rev 4242) @@ -191,6 +191,13 @@ } + /// CPPONLY + bool parallelizable() const + { + return true; + } + + private: /// one locus const lociList m_loci; @@ -261,6 +268,13 @@ /// HIDDEN string describe(bool format = true) const; + /// CPPONLY + bool parallelizable() const + { + return true; + } + + private: /// one locus const lociList m_loci; @@ -333,6 +347,13 @@ } + /// CPPONLY + bool parallelizable() const + { + return true; + } + + private: /// a list of peneOps const opList m_peneOps; @@ -395,6 +416,13 @@ } + /// CPPONLY + bool parallelizable() const + { + return false; + } + + private: /// user supplied python function const pyFunc m_func; Modified: trunk/src/population.cpp =================================================================== --- trunk/src/population.cpp 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/population.cpp 2011-06-29 21:34:43 UTC (rev 4242) @@ -787,7 +787,7 @@ for (size_t i = 0; i < infoFields.size(); ++i) fields[i] = infoIdx(infoFields[i]); for (size_t sp = 0; sp < numSubPop(); ++sp) - std::sort(rawIndBegin(sp), rawIndEnd(sp), indCompare(fields)); + parallelSort(rawIndBegin(sp), rawIndEnd(sp), indCompare(fields)); setIndOrdered(false); } @@ -798,10 +798,9 @@ "This operation is not allowed when there is an activated virtual subpopulation"); size_t info = infoIdx(field); - DBG_DO(DBG_POPULATION, cerr << "Sorting individuals." << endl); // sort individuals first - std::sort(rawIndBegin(), rawIndEnd(), indCompare(info)); + parallelSort(rawIndBegin(), rawIndEnd(), indCompare(info)); setIndOrdered(false); // sort individuals first Modified: trunk/src/selector.cpp =================================================================== --- trunk/src/selector.cpp 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/selector.cpp 2011-06-29 21:34:43 UTC (rev 4242) @@ -42,9 +42,21 @@ for (; sp != spEnd; ++sp) { if (sp->isVirtual()) pop.activateVirtualSubPop(*sp); - IndIterator ind = pop.indIterator(sp->subPop()); - for (; ind.valid(); ++ind) - ind->setInfo(indFitness(pop, &*ind), fit_id); + if (numThreads() > 1 && parallelizable()) { +#pragma omp parallel + { +#ifdef _OPENMP + IndIterator ind = pop.indIterator(sp->subPop(), omp_get_thread_num()); + for (; ind.valid(); ++ind) + ind->setInfo(indFitness(pop, &*ind), fit_id); +#endif + } + + } else { + IndIterator ind = pop.indIterator(sp->subPop()); + for (; ind.valid(); ++ind) + ind->setInfo(indFitness(pop, &*ind), fit_id); + } if (sp->isVirtual()) pop.deactivateVirtualSubPop(sp->subPop()); } @@ -253,3 +265,5 @@ } + + Modified: trunk/src/selector.h =================================================================== --- trunk/src/selector.h 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/selector.h 2011-06-29 21:34:43 UTC (rev 4242) @@ -225,6 +225,13 @@ } + /// CPPONLY + bool parallelizable() const + { + return true; + } + + private: /// const lociList m_loci; @@ -297,6 +304,13 @@ } + /// CPPONLY + bool parallelizable() const + { + return true; + } + + private: /// one locus const lociList m_loci; @@ -366,6 +380,13 @@ } + /// CPPONLY + bool parallelizable() const + { + return true; + } + + private: /// a list of selectors const opList m_selectors; @@ -425,6 +446,13 @@ } + /// CPPONLY + bool parallelizable() const + { + return false; + } + + private: /// user supplied python function const pyFunc m_func; Modified: trunk/src/stator.cpp =================================================================== --- trunk/src/stator.cpp 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/stator.cpp 2011-06-29 21:34:43 UTC (rev 4242) @@ -2462,32 +2462,15 @@ double diffCnt = 0; int numComparison = 0; - size_t size = end - begin; - size_t nThreads = numThreads(); - - if (nThreads > 1) + if (numThreads() > 1) { #ifdef _OPENMP + size_t size = end - begin; # pragma omp parallel reduction(+ : diffCnt, numComparison) - { - size_t id = omp_get_thread_num(); - HAPLOLIST::const_iterator it = begin + id * (size / nThreads); - HAPLOLIST::const_iterator itEnd = id == nThreads - 1 ? end : it + (size / nThreads); - for (; it != itEnd; ++it) { - HAPLOLIST::const_iterator it1 = it; - for (++it1; it1 != end; ++it1) { - const vectora & seq1 = *it; - const vectora & seq2 = *it1; - size_t sz = seq1.size(); - for (size_t i = 0; i < sz; ++i) - diffCnt += seq1[i] != seq2[i]; - ++numComparison; - } - } - } -#endif - else { - HAPLOLIST::const_iterator it = begin; - for (; it != end; ++it) { + { + size_t id = omp_get_thread_num(); + HAPLOLIST::const_iterator it = begin + id * (size / numThreads()); + HAPLOLIST::const_iterator itEnd = id == numThreads() - 1 ? end : it + (size / numThreads()); + for (; it != itEnd; ++it) { HAPLOLIST::const_iterator it1 = it; for (++it1; it1 != end; ++it1) { const vectora & seq1 = *it; @@ -2499,6 +2482,21 @@ } } } +#endif + } else { + HAPLOLIST::const_iterator it = begin; + for (; it != end; ++it) { + HAPLOLIST::const_iterator it1 = it; + for (++it1; it1 != end; ++it1) { + const vectora & seq1 = *it; + const vectora & seq2 = *it1; + size_t sz = seq1.size(); + for (size_t i = 0; i < sz; ++i) + diffCnt += seq1[i] != seq2[i]; + ++numComparison; + } + } + } // return 0 if there is only one sequence return numComparison == 0 ? 0 : diffCnt / numComparison; } Modified: trunk/src/transmitter.cpp =================================================================== --- trunk/src/transmitter.cpp 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/transmitter.cpp 2011-06-29 21:34:43 UTC (rev 4242) @@ -417,11 +417,15 @@ const stringFunc & output, int begin, int end, int step, const intList & at, const intList & reps, const subPopList & subPops, const stringList & infoFields) : - GenoTransmitter(output, begin, end, step, at, reps, subPops, infoFields) - , m_intensity(intensity), m_rates(rates.elems()), m_loci(loci), - m_recBeforeLoci(0), m_convMode(convMode.elems()), - m_bt(numThreads(), getRNG()), m_chromX(-1), m_chromY(-1), m_customizedBegin(-1), m_customizedEnd(-1), - m_algorithm(0), m_debugOutput(NULL) + GenoTransmitter(output, begin, end, step, at, reps, subPops, infoFields), + m_intensity(intensity), m_rates(rates.elems()), m_loci(loci), + m_recBeforeLoci(0), m_convMode(convMode.elems()), m_chromX(-1), m_chromY(-1), + m_customizedBegin(-1), m_customizedEnd(-1), m_algorithm(0), m_debugOutput(NULL), +#ifdef _OPENMP + m_bt(numThreads(), getRNG()) +#else + m_bt(getRNG()) +#endif { DBG_FAILIF(m_convMode.empty(), ValueError, @@ -589,9 +593,13 @@ // if the operator is called directly, there is no way to know population size so we // a variable to tell it. +#ifdef _OPENMP for (size_t i = 0; i < numThreads(); i++) m_bt[i].setParameter(vecP, 0 /* obsolete m_intendedSize */); +#else + m_bt.setParameter(vecP, 0 /* obsolete m_intendedSize */); +#endif // choose an algorithm // if recombinations are dense. use the first algorithm // For example 10 chromoes, regular 0.5*10=5 @@ -614,7 +622,11 @@ initializeIfNeeded(offspring); //Bernullitrial for each thread +#ifdef _OPENMP Bernullitrials & bt = m_bt[omp_get_thread_num()]; +#else + Bernullitrials & bt = m_bt; +#endif // use which copy of chromosome GenoIterator cp[2], off; Modified: trunk/src/transmitter.h =================================================================== --- trunk/src/transmitter.h 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/transmitter.h 2011-06-29 21:34:43 UTC (rev 4242) @@ -623,9 +623,6 @@ const vectorf m_convMode; - /// bernulli trials - mutable vector<Bernullitrials> m_bt; - // locataion of special chromosomes mutable int m_chromX; mutable int m_chromY; @@ -637,6 +634,14 @@ mutable ostream * m_debugOutput; + /// bernulli trials +#ifdef _OPENMP + mutable vector<Bernullitrials> m_bt; +#else + mutable Bernullitrials m_bt; +#endif + + }; } Modified: trunk/src/utility.cpp =================================================================== --- trunk/src/utility.cpp 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/utility.cpp 2011-06-29 21:34:43 UTC (rev 4242) @@ -2263,7 +2263,11 @@ PyObject * res = NULL; if (m_stmts != NULL) { +#if PY_VERSION_HEX >= 0x03020000 + res = PyEval_EvalCode((PyObject *)m_stmts, m_locals, m_locals); +#else res = PyEval_EvalCode((PyCodeObject *)m_stmts, m_locals, m_locals); +#endif if (res == NULL) { #ifndef OPTIMIZED if (debug(DBG_GENERAL)) { @@ -2279,7 +2283,11 @@ } if (m_expr != NULL) { +#if PY_VERSION_HEX >= 0x03020000 + res = PyEval_EvalCode((PyObject *)m_expr, m_locals, m_locals); +#else res = PyEval_EvalCode((PyCodeObject *)m_expr, m_locals, m_locals); +#endif if (res == NULL) { #ifndef OPTIMIZED if (debug(DBG_GENERAL)) { Modified: trunk/src/utility.h =================================================================== --- trunk/src/utility.h 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/src/utility.h 2011-06-29 21:34:43 UTC (rev 4242) @@ -76,6 +76,12 @@ /// for openMP #ifdef _OPENMP # include "omp.h" +# if defined(__INTEL_COMPILER) +# include "tbb/parallel_sort.h" +# include "tbb/task_scheduler_init.h" +# elif defined(GCC_VERSION) && GCC_VERSION >= 40300 +# include "parallel/algorithm" +# endif #endif /// for bernulli trials. // use vector<bool> instead of dynamic_bitset since I can manipulate @@ -145,6 +151,26 @@ /// CPPONLY return val and increase val by 1, ensuring thread safety ATOMICLONG fetchAndIncrement(ATOMICLONG * val); +/// CPPONLY parallel sort by using tbb or gnu parallel +template<class T1, class T2> +void parallelSort(T1 start, T1 end, T2 cmp) +{ + if (numThreads() > 1) { +#ifdef _OPENMP +# if defined(__INTEL_COMPILER) + tbb::task_scheduler_init init(numThreads()); + tbb::parallel_sort(start, end, cmp); +# elif defined(GCC_VERSION) && GCC_VERSION >= 40300 + __gnu_parallel::sort(start, end, cmp); +# else + std::sort(start, end, cmp); +# endif +#endif + } else { + std::sort(start, end, cmp); + } +} + /// a utility function to check keyboard stroke /// CPPONLY int simuPOP_kbhit(); @@ -1202,6 +1228,12 @@ if (expr.empty() && stmts.empty()) return; + //detect leading spaces from python expressions + DBG_FAILIF(!expr.empty() && (expr[0] == ' ' || expr[0] == '\t'), ValueError, + "Can not include leading space in python expression '" + expr + "'"); + DBG_FAILIF(!stmts.empty() && (stmts[0] == ' ' || stmts[0] == '\t'), ValueError, + "Can not include leading space in python statement '" + stmts + "'"); + compileExpr(expr); compileStmts(stmts); } Modified: trunk/test/performance.csv =================================================================== --- trunk/test/performance.csv 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/test/performance.csv 2011-06-29 21:34:43 UTC (rev 4242) @@ -448,3 +448,120 @@ TestInitSex, 2011-06-06 15:43:11,943, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4200-intel, short, 13.1370029449, 13.5422229767 TestInitSex, 2011-06-06 15:43:59,207, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4200-intel, long, 13.7384490967, 15.3715240955 TestInitSex, 2011-06-06 15:44:27,405, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4200-intel, binary, 12.9587409496, 13.3092448711 +TestInitInfo, 2011-06-07 10:50:29,049, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4205-intel, short, 28.5263929367, 28.5497779846 +TestInitInfo, 2011-06-07 10:51:25,868, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4205-intel, long, 27.8562178612, 28.108784914 +TestInitInfo, 2011-06-07 10:52:22,403, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4205-intel, binary, 27.9055569172, 27.9653069973 +TestInitInfo, 2011-06-07 11:01:39,745, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4205-intel, short, 8.08958816528, 8.34579896927 +TestInitInfo, 2011-06-07 11:01:57,159, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4205-intel, long, 8.00524497032, 8.44241905212 +TestInitInfo, 2011-06-07 11:02:13,861, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4205-intel, binary, 8.06356215477, 8.2104408741 +TestInitInfo, 2011-06-07 11:52:02,098, EPI7-0541302, AMD64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4205-vc, short, 42.5138275974, 42.0906409373 +TestInitInfo, 2011-06-07 11:53:30,035, EPI7-0541302, AMD64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4205-vc, long, 42.7154268612, 43.2257380443 +TestInitInfo, 2011-06-07 11:55:01,380, EPI7-0541302, AMD64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4205-vc, binary, 45.0157581313, 44.4060398472 +TestInitInfo, 2011-06-07 11:55:52,381, EPI7-0541302, AMD64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4205-vc, short, 12.986396842, 14.089627703 +TestInitInfo, 2011-06-07 11:56:20,819, EPI7-0541302, AMD64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4205-vc, long, 13.1444051231, 13.6804705765 +TestInitInfo, 2011-06-07 11:56:49,009, EPI7-0541302, AMD64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4205-vc, binary, 12.6781480139, 13.7568184564 +TestMapSelector, 2011-06-08 12:32:43,362, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4212-intel, short, 137.560660124, 136.669243097 +TestMapSelector, 2011-06-08 12:37:05,477, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4212-intel, long, 131.439245939, 129.801275969 +TestMapSelector, 2011-06-08 12:42:04,585, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4212-intel, binary, 149.361258984, 148.818060875 +TestMapSelector, 2011-06-08 12:48:18,478, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4212-intel, short, 45.7759559155, 52.9312109947 +TestMapSelector, 2011-06-08 12:49:53,758, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4212-intel, long, 46.7970941067, 47.7334721088 +TestMapSelector, 2011-06-08 12:51:42,545, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4212-intel, binary, 52.5352201462, 55.497841835 +TestMaSelector, 2011-06-08 14:28:08,546, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4214-intel, short, 25.4252510071, 25.5701878071 +TestMaSelector, 2011-06-08 14:29:05,049, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4214-intel, long, 27.9332430363, 27.9779438972 +TestMaSelector, 2011-06-08 14:30:42,441, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4214-intel, binary, 48.2308118343, 48.3816211224 +TestMaSelector, 2011-06-08 14:31:09,735, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4214-intel, short, 7.88334703445, 8.11231207848 +TestMaSelector, 2011-06-08 14:31:26,819, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4214-intel, long, 8.17427706718, 8.4179918766 +TestMaSelector, 2011-06-08 14:31:57,265, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4214-intel, binary, 15.1356091499, 14.8043692112 +TestMlSelector, 2011-06-08 15:46:22,150, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4215-intel, short, 50.193365097, 50.2650611401 +TestMlSelector, 2011-06-08 15:48:09,026, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4215-intel, long, 51.6552660465, 54.0810310841 +TestMlSelector, 2011-06-08 15:50:16,152, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4215-intel, binary, 62.9643480778, 62.9600830078 +TestMlSelector, 2011-06-08 15:58:01,759, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4215-intel, short, 20.2570528984, 18.9420928955 +TestMlSelector, 2011-06-08 15:58:42,519, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4215-intel, long, 19.7100989819, 20.2147932053 +TestMlSelector, 2011-06-08 15:59:33,111, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4215-intel, binary, 24.4318461418, 25.4335269928 +TestMapPenetrance, 2011-06-09 13:29:16,820, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4217-intel, short, 30.1838719845, 29.9526631832 +TestMapPenetrance, 2011-06-09 13:30:24,110, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4217-intel, long, 32.5619549751, 32.8275830746 +TestMapPenetrance, 2011-06-09 13:31:39,551, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4217-intel, binary, 36.6352450848, 36.3903110027 +TestMapPenetrance, 2011-06-09 13:34:04,566, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4217-intel, short, 13.2235410213, 13.5193769932 +TestMapPenetrance, 2011-06-09 13:34:30,985, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4217-intel, long, 12.4324560165, 13.0819602013 +TestMapPenetrance, 2011-06-09 13:34:59,703, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4217-intel, binary, 13.6132779121, 14.0616240501 +TestMaPenetrance, 2011-06-09 14:15:27,807, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4218-intel, short, 9.05448889732, 9.03937888145 +TestMaPenetrance, 2011-06-09 14:15:49,226, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4218-intel, long, 9.61507201195, 9.80975604057 +TestMaPenetrance, 2011-06-09 14:16:19,546, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4218-intel, binary, 13.9117228985, 14.0005609989 +TestMaPenetrance, 2011-06-09 14:16:26,804, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4218-intel, short, 2.95468306541, 3.07803201675 +TestMaPenetrance, 2011-06-09 14:16:33,916, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4218-intel, long, 3.09952521324, 3.21534013748 +TestMaPenetrance, 2011-06-09 14:16:44,022, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4218-intel, binary, 4.47951889038, 4.53425717354 +TestMlPenetrance, 2011-06-09 14:18:44,988, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4218-intel, short, 59.3637518883, 59.5009410381 +TestMlPenetrance, 2011-06-09 14:20:48,471, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4218-intel, long, 61.0185468197, 60.5403618813 +TestMlPenetrance, 2011-06-09 14:23:09,441, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4218-intel, binary, 69.4342930317, 69.1806800365 +TestMlPenetrance, 2011-06-09 14:23:57,203, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4218-intel, short, 22.7854809761, 23.7821338177 +TestMlPenetrance, 2011-06-09 14:24:45,537, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4218-intel, long, 22.8191227913, 24.6416099072 +TestMlPenetrance, 2011-06-09 14:25:41,754, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4218-intel, binary, 26.4700949192, 28.6646509171 +TestMigratorByProbability, 2011-06-14 15:22:26,387, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4226-intel, short, 25.6720509529, 289.408267021 +TestMigratorByProbability, 2011-06-14 15:27:43,088, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4226-intel, long, 26.1059360504, 289.273638964 +TestMigratorByProbability, 2011-06-14 15:33:03,204, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4226-intel, binary, 26.363268137, 292.225383997 +TestMigratorByProbability, 2011-06-14 15:36:25,599, bp9, x86_64-2threads, python2.7.1, simuPOP-1.0.6svn, rev4226-intel, short, 3.85128188133, 37.7105200291 +TestMigratorByProbability, 2011-06-14 15:37:09,576, bp9, x86_64-2threads, python2.7.1, simuPOP-1.0.6svn, rev4226-intel, long, 3.8537299633, 38.7310800552 +TestMigratorByProbability, 2011-06-14 15:37:52,903, bp9, x86_64-2threads, python2.7.1, simuPOP-1.0.6svn, rev4226-intel, binary, 3.89192581177, 37.8206448555 +TestMigratorByProbability, 2011-06-14 15:39:51,191, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4226-intel, short, 3.68470191956, 36.2090260983 +TestMigratorByProbability, 2011-06-14 15:40:32,838, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4226-intel, long, 3.67241191864, 36.6956839561 +TestMigratorByProbability, 2011-06-14 15:41:14,535, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4226-intel, binary, 3.70908212662, 36.3693478107 +TestMigratorByProbability, 2011-06-14 16:00:42,787, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4226-gcc, short, 19.2052230835, 213.073572874 +TestMigratorByProbability, 2011-06-14 16:04:33,578, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4226-gcc, long, 19.0889210701, 210.232218981 +TestMigratorByProbability, 2011-06-14 16:08:30,824, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4226-gcc, binary, 19.5818870068, 215.983033895 +TestMigratorByProbability, 2011-06-14 16:11:28,255, bp9, x86_64-2threads, python2.7.1, simuPOP-1.0.6svn, rev4226-gcc, short, 11.753456831, 129.562813044 +TestMigratorByProbability, 2011-06-14 16:13:45,338, bp9, x86_64-2threads, python2.7.1, simuPOP-1.0.6svn, rev4226-gcc, long, 11.34167099, 124.56328702 +TestMigratorByProbability, 2011-06-14 16:16:09,380, bp9, x86_64-2threads, python2.7.1, simuPOP-1.0.6svn, rev4226-gcc, binary, 11.8418748379, 130.746499777 +TestMigratorByProbability, 2011-06-14 16:17:49,311, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4226-gcc, short, 7.99957203865, 84.460050106 +TestMigratorByProbability, 2011-06-14 16:19:20,940, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4226-gcc, long, 7.60408210754, 82.7148649693 +TestMigratorByProbability, 2011-06-14 16:20:57,946, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4226-gcc, binary, 8.37837600708, 87.1949620247 +TestMigratorByProbability, 2011-06-15 12:26:38,514, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4229-intel, short, 1.9312608242, 17.998347044 +TestMigratorByProbability, 2011-06-15 12:26:59,075, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4229-intel, long, 1.87130308151, 17.1944150925 +TestMigratorByProbability, 2011-06-15 12:27:20,130, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4229-intel, binary, 1.89324998856, 17.7626860142 +TestMigratorByProbability, 2011-06-15 13:42:10,927, bp9, x86_64-2threads, python2.7.1, simuPOP-1.0.6svn, rev4229-intel, short, 2.60852098465, 25.8612132072 +TestMigratorByProbability, 2011-06-15 13:42:44,813, bp9, x86_64-2threads, python2.7.1, simuPOP-1.0.6svn, rev4229-intel, long, 2.70065402985, 25.6916520596 +TestMigratorByProbability, 2011-06-15 13:43:15,274, bp9, x86_64-2threads, python2.7.1, simuPOP-1.0.6svn, rev4229-intel, binary, 2.63936305046, 25.8546738625 +TestMigratorByProbability, 2011-06-15 14:03:33,076, bp9, x86_64-2threads, python2.7.1, simuPOP-1.0.6svn, rev4229-gcc, short, 11.1535990238, 123.792095184 +TestMigratorByProbability, 2011-06-15 14:08:02,558, bp9, x86_64-2threads, python2.7.1, simuPOP-1.0.6svn, rev4229-gcc, long, 10.8459448814, 119.107388973 +TestMigratorByProbability, 2011-06-15 14:12:34,146, bp9, x86_64-2threads, python2.7.1, simuPOP-1.0.6svn, rev4229-gcc, binary, 11.3297309875, 125.051301003 +TestMigratorByProbability, 2011-06-15 14:44:25,953, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4229-gcc, short, 6.46779084206, 73.2599718571 +TestMigratorByProbability, 2011-06-15 14:45:48,805, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4229-gcc, long, 6.84860181808, 74.6199998856 +TestMigratorByProbability, 2011-06-15 14:47:15,090, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4229-gcc, binary, 7.11267113686, 77.6748759747 +TestMigratorByIndInfo, 2011-06-15 15:26:07,842, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, short, 26.1453762054, 293.74267602 +TestMigratorByIndInfo, 2011-06-15 15:31:32,104, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, long, 26.3325400352, 295.03544116 +TestMigratorByIndInfo, 2011-06-15 15:37:02,364, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, binary, 27.2269229889, 299.873353958 +TestMigratorByIndInfo, 2011-06-15 15:37:35,940, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, short, 2.99913883209, 27.3614680767 +TestMigratorByIndInfo, 2011-06-15 15:38:13,350, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, long, 3.31677007675, 31.3634848595 +TestMigratorByIndInfo, 2011-06-15 15:38:52,125, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, binary, 3.51236987114, 32.3257880211 +TestMigratorByCount, 2011-06-15 15:44:37,405, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, short, 27.3829629421, 313.405131102 +TestMigratorByCount, 2011-06-15 15:50:18,503, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, long, 27.1348381042, 312.564651012 +TestMigratorByCount, 2011-06-15 15:56:05,059, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, binary, 28.0947768688, 316.94431901 +TestMigratorByCount, 2011-06-15 15:57:04,649, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, short, 4.43328809738, 53.2696549892 +TestMigratorByCount, 2011-06-15 15:58:03,514, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, long, 4.49258899689, 53.0905818939 +TestMigratorByCount, 2011-06-15 15:59:03,128, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, binary, 4.42320084572, 53.5732860565 +TestMigratorByProportion, 2011-06-16 09:31:14,071, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, short, 27.1460089684, 311.949622869 +TestMigratorByProportion, 2011-06-16 09:37:00,421, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, long, 27.462939024, 316.891449928 +TestMigratorByProportion, 2011-06-16 09:42:50,875, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, binary, 28.1410610676, 320.35036397 +TestMigratorByProportion, 2011-06-16 09:43:50,063, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, short, 4.38145494461, 53.0418229103 +TestMigratorByProportion, 2011-06-16 09:44:49,681, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, long, 4.43273711205, 53.8642539978 +TestMigratorByProportion, 2011-06-16 09:45:50,018, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4230-intel, binary, 4.50796914101, 54.1398379803 +TestMigratorByIndInfo, 2011-06-16 12:18:46,099, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4232-intel, short, 2.966381073, 27.7702920437 +TestMigratorByIndInfo, 2011-06-16 12:19:19,834, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4232-intel, long, 2.91467499733, 28.0086240768 +TestMigratorByIndInfo, 2011-06-16 12:19:54,456, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4232-intel, binary, 3.1325969696, 28.1677310467 +TestMigratorByProportion, 2011-06-16 12:20:50,553, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4232-intel, short, 4.09359002113, 50.0307469368 +TestMigratorByProportion, 2011-06-16 12:21:45,803, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4232-intel, long, 4.10800004005, 49.5832879543 +TestMigratorByProportion, 2011-06-16 12:22:42,183, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4232-intel, binary, 4.32871103287, 50.3448860645 +TestMigratorByCount, 2011-06-16 12:23:39,026, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4232-intel, short, 4.16416311264, 50.6448938847 +TestMigratorByCount, 2011-06-16 12:24:34,253, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4232-intel, long, 4.0694630146, 49.7850799561 +TestMigratorByCount, 2011-06-16 12:25:30,668, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4232-intel, binary, 4.26471400261, 50.2679200172 +TestSortIndividuals, 2011-06-17 14:19:38,738, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4236-intel, short, 53.682005167, 33.6767070293 +TestSortIndividuals, 2011-06-17 14:21:20,066, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4236-intel, long, 52.7289278507, 33.5573928356 +TestSortIndividuals, 2011-06-17 14:23:07,867, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4236-intel, binary, 56.0339119434, 36.2461290359 +TestSortIndividuals, 2011-06-17 14:24:03,903, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4236-intel, short, 1.04947304726, 1.13233399391 +TestSortIndividuals, 2011-06-17 14:24:21,066, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4236-intel, long, 1.03604102135, 1.10664105415 +TestSortIndividuals, 2011-06-17 14:24:38,181, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4236-intel, binary, 1.10549497604, 1.12094712257 +TestPedigreeMating, 2011-06-22 15:43:19,001, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4238-intel, short, 39.6762161255, 88.2637140751 +TestPedigreeMating, 2011-06-22 15:48:12,256, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4238-intel, long, 46.6159968376, 99.869631052 +TestPedigreeMating, 2011-06-22 15:52:44,522, bp9, x86_64-1threads, python2.7.1, simuPOP-1.0.6svn, rev4238-intel, binary, 41.4395649433, 85.7024009228 +TestPedigreeMating, 2011-06-22 16:05:06,221, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4238-intel, short, 25.8149080276, 61.1918590069 +TestPedigreeMating, 2011-06-22 16:10:02,036, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4238-intel, long, 28.0662469864, 62.3663561344 +TestPedigreeMating, 2011-06-22 16:14:42,413, bp9, x86_64-4threads, python2.7.1, simuPOP-1.0.6svn, rev4238-intel, binary, 26.5212380886, 54.3880081177 Modified: trunk/test/performance.log =================================================================== --- trunk/test/performance.log 2011-06-29 21:13:49 UTC (rev 4241) +++ trunk/test/performance.log 2011-06-29 21:34:43 UTC (rev 4242) @@ -6590,3 +6590,1056 @@ TestInitSex : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 13.3092448711 TestInitSex : 12.9587409496, 13.3092448711 TestInitSex : End of test TestInitSex +TestInitInfo : Host: bp9 (Linux, x86_64, x86_64) +TestInitInfo : Time: Tue Jun 7 10:49:31 2011 +TestInitInfo : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestInitInfo : simuPOP: 1.0.6svn (rev 4205, module short, optimized, 1 threads) +TestInitInfo : Test: InitInfo, results are time (not processor time) to apply operator for 1000 times. +TestInitInfo : size=1000000: 28.5263929367 +TestInitInfo : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 28.5497779846 +TestInitInfo : 28.5263929367, 28.5497779846 +TestInitInfo : End of test TestInitInfo +TestInitInfo : Host: bp9 (Linux, x86_64, x86_64) +TestInitInfo : Time: Tue Jun 7 10:50:29 2011 +TestInitInfo : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestInitInfo : simuPOP: 1.0.6svn (rev 4205, module long, optimized, 1 threads) +TestInitInfo : Test: InitInfo, results are time (not processor time) to apply operator for 1000 times. +TestInitInfo : size=1000000: 27.8562178612 +TestInitInfo : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 28.108784914 +TestInitInfo : 27.8562178612, 28.108784914 +TestInitInfo : End of test TestInitInfo +TestInitInfo : Host: bp9 (Linux, x86_64, x86_64) +TestInitInfo : Time: Tue Jun 7 10:51:26 2011 +TestInitInfo : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestInitInfo : simuPOP: 1.0.6svn (rev 4205, module binary, optimized, 1 threads) +TestInitInfo : Test: InitInfo, results are time (not processor time) to apply operator for 1000 times. +TestInitInfo : size=1000000: 27.9055569172 +TestInitInfo : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 27.9653069973 +TestInitInfo : 27.9055569172, 27.9653069973 +TestInitInfo : End of test TestInitInfo +TestInitInfo : Host: bp9 (Linux, x86_64, x86_64) +TestInitInfo : Time: Tue Jun 7 11:01:22 2011 +TestInitInfo : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestInitInfo : simuPOP: 1.0.6svn (rev 4205, module short, optimized, 4 threads) +TestInitInfo : Test: InitInfo, results are time (not processor time) to apply operator for 1000 times. +TestInitInfo : size=1000000: 8.08958816528 +TestInitInfo : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 8.34579896927 +TestInitInfo : 8.08958816528, 8.34579896927 +TestInitInfo : End of test TestInitInfo +TestInitInfo : Host: bp9 (Linux, x86_64, x86_64) +TestInitInfo : Time: Tue Jun 7 11:01:40 2011 +TestInitInfo : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestInitInfo : simuPOP: 1.0.6svn (rev 4205, module long, optimized, 4 threads) +TestInitInfo : Test: InitInfo, results are time (not processor time) to apply operator for 1000 times. +TestInitInfo : size=1000000: 8.00524497032 +TestInitInfo : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 8.44241905212 +TestInitInfo : 8.00524497032, 8.44241905212 +TestInitInfo : End of test TestInitInfo +TestInitInfo : Host: bp9 (Linux, x86_64, x86_64) +TestInitInfo : Time: Tue Jun 7 11:01:57 2011 +TestInitInfo : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestInitInfo : simuPOP: 1.0.6svn (rev 4205, module binary, optimized, 4 threads) +TestInitInfo : Test: InitInfo, results are time (not processor time) to apply operator for 1000 times. +TestInitInfo : size=1000000: 8.06356215477 +TestInitInfo : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 8.2104408741 +TestInitInfo : 8.06356215477, 8.2104408741 +TestInitInfo : End of test TestInitInfo +TestInitInfo : Host: EPI7-0541302 (Windows, AMD64, Intel64 Family 6 Model 30 Stepping 5, GenuineIntel) +TestInitInfo : Time: Tue Jun 07 11:50:36 2011 +TestInitInfo : Python: 2.7.1 [MSC v.1500 64 bit (AMD64)] +TestInitInfo : simuPOP: 1.0.6svn (rev 4205, module short, optimized, 1 threads) +TestInitInfo : Test: InitInfo, results are time (not processor time) to apply operator for 1000 times. +TestInitInfo : size=1000000: 42.5138275974 +TestInitInfo : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 42.0906409373 +TestInitInfo : 42.5138275974, 42.0906409373 +TestInitInfo : End of test TestInitInfo +TestInitInfo : Host: EPI7-0541302 (Windows, AMD64, Intel64 Family 6 Model 30 Stepping 5, GenuineIntel) +TestInitInfo : Time: Tue Jun 07 11:52:02 2011 +TestInitInfo : Python: 2.7.1 [MSC v.1500 64 bit (AMD64)] +TestInitInfo : simuPOP: 1.0.6svn (rev 4205, module long, optimized, 1 threads) +TestInitInfo : Test: InitInfo, results are time (not processor time) to apply operator for 1000 times. +TestInitInfo : size=1000000: 42.7154268612 +TestInitInfo : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 43.2257380443 +TestInitInfo : 42.7154268612, 43.2257380443 +TestInitInfo : End of test TestInitInfo +TestInitInfo : Host: EPI7-0541302 (Windows, AMD64, Intel64 Family 6 Model 30 Stepping 5, GenuineIntel) +TestInitInfo : Time: Tue Jun 07 11:53:30 2011 +TestInitInfo : Python: 2.7.1 [MSC v.1500 64 bit (AMD64)] +TestInitInfo : simuPOP: 1.0.6svn (rev 4205, module binary, optimized, 1 threads) +TestInitInfo : Test: InitInfo, results are time (not processor time) to apply operator for 1000 times. +TestInitInfo : size=1000000: 45.0157581313 +TestInitInfo : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 44.4060398472 +TestInitInfo : 45.0157581313, 44.4060398472 +TestInitInfo : End of test TestInitInfo +TestInitInfo : Host: EPI7-0541302 (Windows, AMD64, Intel64 Family 6 Model 30 Stepping 5, GenuineIntel) +TestInitInfo : Time: Tue Jun 07 11:55:24 2011 +TestInitInfo : Python: 2.7.1 [MSC v.1500 64 bit (AMD64)] +TestInitInfo : simuPOP: 1.0.6svn (rev 4205, module short, optimized, 4 threads) +TestInitInfo : Test: InitInfo, results are time (not processor time) to apply operator for 1000 times. +TestInitInfo : size=1000000: 12.986396842 +TestInitInfo : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 14.089627703 +TestInitInfo : 12.986396842, 14.089627703 +TestInitInfo : End of test TestInitInfo +TestInitInfo : Host: EPI7-0541302 (Windows, AMD64, Intel64 Family 6 Model 30 Stepping 5, GenuineIntel) +TestInitInfo : Time: Tue Jun 07 11:55:52 2011 +TestInitInfo : Python: 2.7.1 [MSC v.1500 64 bit (AMD64)] +TestInitInfo : simuPOP: 1.0.6svn (rev 4205, module long, optimized, 4 threads) +TestInitInfo : Test: InitInfo, results are time (not processor time) to apply operator for 1000 times. +TestInitInfo : size=1000000: 13.1444051231 +TestInitInfo : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 13.6804705765 +TestInitInfo : 13.1444051231, 13.6804705765 +TestInitInfo : End of test TestInitInfo +TestInitInfo : Host: EPI7-0541302 (Windows, AMD64, Intel64 Family 6 Model 30 Stepping 5, GenuineIntel) +TestInitInfo : Time: Tue Jun 07 11:56:21 2011 +TestInitInfo : Python: 2.7.1 [MSC v.1500 64 bit (AMD64)] +TestInitInfo : simuPOP: 1.0.6svn (rev 4205, module binary, optimized, 4 threads) +TestInitInfo : Test: InitInfo, results are time (not processor time) to apply operator for 1000 times. +TestInitInfo : size=1000000: 12.6781480139 +TestInitInfo : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 13.7568184564 +TestInitInfo : 12.6781480139, 13.7568184564 +TestInitInfo : End of test TestInitInfo +TestMapSelector : Host: bp9 (Linux, x86_64, x86_64) +TestMapSelector : Time: Wed Jun 8 12:28:08 2011 +TestMapSelector : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestMapSelector : simuPOP: 1.0.6svn (rev 4212, module short, optimized, 1 threads) +TestMapSelector : Test: MapSelector, results are time (not processor time) to apply operator for 1000 times. +TestMapSelector : size=1000000: 137.560660124 +TestMapSelector : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 136.669243097 +TestMapSelector : 137.560660124, 136.669243097 +TestMapSelector : End of test TestMapSelector +TestMapSelector : Host: bp9 (Linux, x86_64, x86_64) +TestMapSelector : Time: Wed Jun 8 12:32:43 2011 +TestMapSelector : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestMapSelector : simuPOP: 1.0.6svn (rev 4212, module long, optimized, 1 threads) +TestMapSelector : Test: MapSelector, results are time (not processor time) to apply operator for 1000 times. +TestMapSelector : size=1000000: 131.439245939 +TestMapSelector : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 129.801275969 +TestMapSelector : 131.439245939, 129.801275969 +TestMapSelector : End of test TestMapSelector +TestMapSelector : Host: bp9 (Linux, x86_64, x86_64) +TestMapSelector : Time: Wed Jun 8 12:37:06 2011 +TestMapSelector : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestMapSelector : simuPOP: 1.0.6svn (rev 4212, module binary, optimized, 1 threads) +TestMapSelector : Test: MapSelector, results are time (not processor time) to apply operator for 1000 times. +TestMapSelector : size=1000000: 149.361258984 +TestMapSelector : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 148.818060875 +TestMapSelector : 149.361258984, 148.818060875 +TestMapSelector : End of test TestMapSelector +TestMapSelector : Host: bp9 (Linux, x86_64, x86_64) +TestMapSelector : Time: Wed Jun 8 12:46:39 2011 +TestMapSelector : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestMapSelector : simuPOP: 1.0.6svn (rev 4212, module short, optimized, 4 threads) +TestMapSelector : Test: MapSelector, results are time (not processor time) to apply operator for 1000 times. +TestMapSelector : size=1000000: 45.7759559155 +TestMapSelector : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 52.9312109947 +TestMapSelector : 45.7759559155, 52.9312109947 +TestMapSelector : End of test TestMapSelector +TestMapSelector : Host: bp9 (Linux, x86_64, x86_64) +TestMapSelector : Time: Wed Jun 8 12:48:19 2011 +TestMapSelector : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestMapSelector : simuPOP: 1.0.6svn (rev 4212, module long, optimized, 4 threads) +TestMapSelector : Test: MapSelector, results are time (not processor time) to apply operator for 1000 times. +TestMapSelector : size=1000000: 46.7970941067 +TestMapSelector : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 47.7334721088 +TestMapSelector : 46.7970941067, 47.7334721088 +TestMapSelector : End of test TestMapSelector +TestMapSelector : Host: bp9 (Linux, x86_64, x86_64) +TestMapSelector : Time: Wed Jun 8 12:49:54 2011 +TestMapSelector : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestMapSelector : simuPOP: 1.0.6svn (rev 4212, module binary, optimized, 4 threads) +TestMapSelector : Test: MapSelector, results are time (not processor time) to apply operator for 1000 times. +TestMapSelector : size=1000000: 52.5352201462 +TestMapSelector : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 55.497841835 +TestMapSelector : 52.5352201462, 55.497841835 +TestMapSelector : End of test TestMapSelector +TestMaSelector : Host: bp9 (Linux, x86_64, x86_64) +TestMaSelector : Time: Wed Jun 8 14:27:17 2011 +TestMaSelector : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestMaSelector : simuPOP: 1.0.6svn (rev 4214, module short, optimized, 1 threads) +TestMaSelector : Test: MaSelector, results are time (not processor time) to apply operator for 1000 times. +TestMaSelector : size=1000000: 25.4252510071 +TestMaSelector : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 25.5701878071 +TestMaSelector : 25.4252510071, 25.5701878071 +TestMaSelector : End of test TestMaSelector +TestMaSelector : Host: bp9 (Linux, x86_64, x86_64) +TestMaSelector : Time: Wed Jun 8 14:28:08 2011 +TestMaSelector : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestMaSelector : simuPOP: 1.0.6svn (rev 4214, module long, optimized, 1 threads) +TestMaSelector : Test: MaSelector, results are time (not processor time) to apply operator for 1000 times. +TestMaSelector : size=1000000: 27.9332430363 +TestMaSelector : size=[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]: 27.9779438972 +TestMaSelector : 27.9332430363, 27.9779438972 +TestMaSelector : End of test TestMaSelector +TestMaSelector : Host: bp9 (Linux, x86_64, x86_64) +TestMaSelector : Time: Wed Jun 8 14:29:05 2011 +TestMaSelector : Python: 2.7.1 [GCC Intel(R) C++ g++ 4.4 mode] +TestMaSelector : simuPOP: 1.0.6svn... [truncated message content] |