「view this page in B3 βῆτα server」

Revisions №61438

branch: master 「№61438」
Commited by: Vikram K. Mulligan
GitHub commit link: 「40e5aaf7ca3dbaac」 「№4997」
Difference from previous tested commit:  code diff
Commit date: 2020-09-26 05:24:06
linux.clang linux.gcc linux.srlz mac.clang
debug
release
unit
PyRosetta4.notebook gcc-9.gcc.python37.PyRosetta4.unit linux.clang.cxx11thread.serialization.python37.PyRosetta4.unit linux.gcc.python36.PyRosetta4.unit mac.PyRosetta.unit build.clean.debug alpine.gcc.build.debug clang-10.clang.cxx11thread.mpi.serialization.tensorflow.build.debug gcc-9.gcc.build.debug mysql postgres linux.clang.python36.build.debug linux.zeromq.debug mpi mpi.serialization linux.icc.build.debug OpenCL mac.clang.python36.build.debug build.header build.levels build.ninja_debug graphics static mac.clang.static.build.release build.xcode beautification code_quality.clang_analysis code_quality.clang_tidy code_quality.cppcheck serialization code_quality.submodule_regression integration.addsan integration.mpi integration.release_debug integration.tensorflow integration.thread integration.tutorials integration.ubsan integration.valgrind integration maintenance.documentation performance profile linux.clang.python27.release.PyRosetta4.Debug linux.clang.python36.release.PyRosetta4.Debug linux.clang.python37.release.PyRosetta4.Debug linux.clang.python38.release.PyRosetta4.Debug linux.clang.python27.release.PyRosetta4.MinSizeRel linux.clang.python36.release.PyRosetta4.MinSizeRel linux.clang.python37.release.PyRosetta4.MinSizeRel linux.clang.python38.release.PyRosetta4.MinSizeRel ubuntu.clang.python27.release.PyRosetta4.MinSizeRel ubuntu.clang.python36.release.PyRosetta4.MinSizeRel ubuntu.clang.python37.release.PyRosetta4.MinSizeRel ubuntu.clang.python38.release.PyRosetta4.MinSizeRel linux.clang.python27.release.PyRosetta4.Release linux.clang.python36.release.PyRosetta4.Release linux.clang.python37.release.PyRosetta4.Release linux.clang.python38.release.PyRosetta4.Release ubuntu.clang.python27.release.PyRosetta4.Release ubuntu.clang.python36.release.PyRosetta4.Release ubuntu.clang.python37.release.PyRosetta4.Release ubuntu.clang.python38.release.PyRosetta4.Release release.PyRosetta4.conda.Release release.source scientific.antibody_grafting.debug scientific.antibody_grafting scientific.antibody_h3_modeling.debug scientific.ddg_ala_scan scientific.enzyme_design scientific.ligand_scoring_ranking.debug scientific.ligand_scoring_ranking scientific.loop_modeling_ccd_12res.debug scientific.loop_modeling_kic_12res.debug scientific.loop_modeling_kic_fragments_12res.debug scientific.loop_modeling_kic_fragments_12res scientific.make_fragments.debug scientific.make_fragments scientific.mhc_epitope_energy.debug scientific.mp_dock scientific.mp_f19_decoy_discrimination scientific.mp_lipid_acc.debug scientific.peptide_pnear_vs_ic50.debug scientific.peptide_pnear_vs_ic50 scientific.relax_fast_5iter.debug scientific.relax_fast_5iter scientific.rna_denovo_favorites.debug scientific.rna_denovo_favorites scientific.sewing.debug scientific.simple_cycpep_predict.debug scientific.simple_cycpep_predict scientific.stepwise_rna_favorites.debug linux.clang.score linux.gcc.score mac.clang.score linux.scripts.pyrosetta scripts.rosetta.parse scripts.rosetta.validate scripts.rosetta.verify unit.addsan linux.clang.unit.release linux.gcc.unit.release unit.ubsan unit.valgrind gcc-9.gcc.unit util.apps

Merge pull request #4997 from RosettaCommons/vmullig/non_recursive_refold Attempt to remove recursion in internal coordinate updates Our current internal coordinate update logic can result in call stacks thousands of layers deep. When stack size is limited, this can result in stack overflows. Andy and I have been running into this working with larger poses in threads on MacOS, where the stack size of non-primary threads is limited to 512 kB (something that it's not possible to override when using std::threads). Switching to non-recursive logic will probably have benefits for performance even outside of a multi-threaded context, so let's give this a try. This is complicated by the fact that, given a parent atom P and children C1...CN, the stub used to update C1 is modified by the updating operation _and then_ passed to C2 to update it (where it changes again). So the existing recursive logic was much easier than a non-recursive iterative approach, since it's not straightforward to store the data that are needed to compute each child. The new logic is to iterate over atoms at a given level of depth, updating those atoms' coordinates while constructing two lists: a list of unique stubs with which to update their children, and an ordered list of pairs of (child atom, pointer to stub to use to update). In the next iteration of batches of parents, the old children become the new parents and the old children's stublist becomes the new parents' stublist, parents' coordinates are updated in sequence (suitably modifying the stubs in the parent stublist), and a new children's stublist and children list is populated. This continues until a generation produces no children. This is summarized below: Old: - Start with root atom and its stub. - Recursive function: - Update current atom with stub (updating stub in the process). - Construct child's starting stub. - Loop over all children: - Recursively call this function, passing in a child and the child's stub (both of which will be modified). New: - Allocate space for list of parents' stubs, ordered list of parents. - Allocate space for list of children's stubs, ordered list of children. - Put root atom and its stub into ordered list of parents and list of parents' stubs, respectively. - Do: - Loop over current parents: - For each parent, update current atom with stub (updating stub, owned by parent stublist, in the process). - Construct child's starting stub, and store it in the children's stub list. - For each child, store pair of (child, pointer to child's stub in children's stub list) in children's list. - Delete parents' stub list and list of current parents. - Children's stub list and children's list become parents' stub list and parents list, respectively. (Done with dual buffers and pointer swap for efficiency). - Break if new parents list is empty (i.e. no children from last round). A few details: - I'm avoiding owning pointers due to the cost of incrementing and decrementing reference counts. - I am using raw pointers, but only for accessing objects that are owned by something else (where the lifetime is longer than the function in which I use raw pointers), which is no more dangerous than using references, or for objects owned by std::deques where the lifetime is longer than the raw pointers (again, no more dangerous than using references). - Since appending to a deque doesn't invalidate references to existing elements, storing pointers to those elements is safe. Tasks: - [x] Switch internal logic to a non-recursive algorithm based on ordinary iteration. - [x] Debug. - [x] Check unit tests. - [x] Check integration tests. - [x] Check performance tests. - [x] Check profile tests. - [x] Check scientific tests --> simple_cycpep_predict unchanged. - [x] Beauty.

...
Test: mac.clang.python27.build.xcode

 View log

Loading...

 View log in dialog  View log in log in separate window
Test: ubuntu.clang.code_quality.clang_tidy

Failed sub-tests (click for more details):
src/core/chemical/rdkit/util.cc src/core/energy_methods/DNA_DihedralEnergy.cc src/core/fragment/FragmentSetLoader.cc src/core/io/StructFileRepOptions.cc src/core/pack/task/operation/TaskOperations.cc src/core/simple_metrics/metrics/ResidueSummaryMetric.cc src/protocols/abinitio/abscript/FragmentJumpCM.cc src/protocols/calc_taskop_filters/MultipleSigmoidsFilter.cc src/protocols/calc_taskop_filters/OperatorFilter.cc src/protocols/calc_taskop_filters/SigmoidFilter.cc src/protocols/canonical_sampling/SimulatedTempering.cc src/protocols/chemically_conjugated_docking/UBQ_GTPaseMover.cc src/protocols/cutoutdomain/CutOutDomain.cc src/protocols/cyclic_peptide/DeclareBond.cc src/protocols/cyclic_peptide/PeptideStubMover.cc src/protocols/denovo_design/components/StructureData.cc src/protocols/dna/util.cc src/protocols/dna_dock/PropagateClashCheckFilter.cc src/protocols/enzdes/EnzFilters.cc src/protocols/enzdes/PackRotamersMoverPartGreedy.cc src/protocols/evolution/NucleotideMutation.cc src/protocols/features/HBondFeatures.cc src/protocols/filters/BasicFilters.cc src/protocols/filters/ReplicateFilter.cc src/protocols/fldsgn/CircularPermutation.cc src/protocols/fldsgn/filters/InterlockingAromaFilter.cc src/protocols/fldsgn/filters/ParallelBetaPairingPreferenceFilter.cc src/protocols/fldsgn/filters/SecondaryStructureCountFilter.cc src/protocols/generalized_kinematic_closure/GeneralizedKIC.cc src/protocols/grafting/simple_movers/KeepRegionMover.cc src/protocols/hbnet/HBNet.cc src/protocols/hbnet/HBNetStapleInterface.cc src/protocols/helical_bundle/BackboneGridSampler.cc src/protocols/helical_bundle/FitSimpleHelix.cc src/protocols/helical_bundle/MakeBundle.cc src/protocols/helical_bundle/PerturbBundle.cc src/protocols/hotspot_hashing/movers/PlaceProbeMover.cc src/protocols/hybridization/BackboneTorsionPerturbation.cc src/protocols/hybridization/BackboneTorsionSampler.cc src/protocols/hybridization/HybridizeProtocol.cc src/protocols/indexed_structure_store/movers/DirectSegmentLookupMover.cc src/protocols/ligand_docking/ProtLigEnsemble.cc src/protocols/loop_modeling/utilities/rosetta_scripts.cc src/protocols/loophash/LoopHashDiversifier.cc src/protocols/loophash/LoopHashMoverWrapper.cc src/protocols/loops/loops_definers/LoopsExplicitDefiner.cc src/protocols/matdes/ClashCheckFilter.cc src/protocols/matdes/GetRBDOFValues.cc src/protocols/matdes/OligomericAverageDegreeFilter.cc src/protocols/membrane/FlipMover.cc src/protocols/membrane/SpinAroundPartnerMover.cc src/protocols/minimization_packing/DisulfideOptimizationMover.cc src/protocols/multistage_rosetta_scripts/MRSJobQueen.cc src/protocols/ncbb/ResidueReplacementRebuildMover.cc src/protocols/parser/FragmentReader.cc src/protocols/pose_creation/RepeatPropagationMover.cc src/protocols/pose_length_moves/InsertResMover.cc src/protocols/protein_interface_design/filters/AverageDegreeFilter.cc src/protocols/protein_interface_design/filters/BoltzmannFilter.cc src/protocols/protein_interface_design/filters/DesignableResiduesFilter.cc src/protocols/protein_interface_design/filters/RmsdFilter.cc src/protocols/protein_interface_design/filters/StubScoreLoopsFilter.cc src/protocols/protein_interface_design/filters/TorsionFilter.cc src/protocols/protein_interface_design/movers/DockWithHotspotMover.cc src/protocols/protein_interface_design/movers/MapHotspot.cc src/protocols/protein_interface_design/movers/PlaceSimultaneouslyMover.cc src/protocols/protein_interface_design/movers/SetupHotspotConstraintsLoopsMover.cc src/protocols/protein_interface_design/movers/SetupHotspotConstraintsMover.cc src/protocols/protein_interface_design/movers/TryRotamers.cc src/protocols/relax/AtomCoordinateCstMover.cc src/protocols/relax/membrane/MPRangeRelaxMover.cc src/protocols/rna/denovo/movers/RNA_DeNovoProtocolMover.cc src/protocols/score_filters/ScoreCutoffFilter.cc src/protocols/seeded_abinitio/CoordinateCst.cc src/protocols/seeded_abinitio/GrowPeptides.cc src/protocols/seeded_abinitio/SeedFoldTree.cc src/protocols/seeded_abinitio/SwapSegment.cc src/protocols/sewing/movers/AssemblyMover.cc src/protocols/sewing/requirements/ClashRequirement.cc src/protocols/sewing/requirements/DsspSpecificLengthRequirement.cc src/protocols/sewing/requirements/LengthInResiduesRequirement.cc src/protocols/sewing/requirements/LigandClashRequirement.cc src/protocols/sewing/requirements/SizeInSegmentsRequirement.cc src/protocols/simple_ddg/SSElementBisectddGFilter.cc src/protocols/simple_filters/DisulfideEntropyFilter.cc src/protocols/simple_filters/HelixHelixAngleFilter.cc src/protocols/simple_filters/MPSpanAngleFilter.cc src/protocols/simple_filters/NetChargeFilter.cc src/protocols/simple_filters/NonSequentialNeighborsFilter.cc src/protocols/simple_filters/PackStatFilter.cc src/protocols/simple_filters/ResidueSetChainEnergyFilter.cc src/protocols/simple_filters/SSElementMotifContactFilter.cc src/protocols/simple_filters/ShapeComplementarityFilter.cc src/protocols/simple_filters/SimpleMetricFilter.cc src/protocols/simple_filters/TaskAwareSASAFilter.cc src/protocols/simple_filters/TaskAwareScoreTypeFilter.cc src/protocols/simple_moves/AddChainMover.cc src/protocols/simple_moves/AlignChainMover.cc src/protocols/simple_moves/FavorSequenceProfile.cc src/protocols/simple_moves/SetTorsion.cc src/protocols/simple_moves/SuperimposeMover.cc src/protocols/simple_moves/asym_fold_and_dock/AsymFoldandDockMoveRbJumpMover.cc src/protocols/simple_moves/bin_transitions/InitializeByBins.cc src/protocols/simple_moves/bin_transitions/PerturbByBins.cc src/protocols/simple_task_operations/RestrictToInterface.cc src/protocols/splice/AlignEndsMover.cc src/protocols/splice/FindEndpointsOperation.cc src/protocols/splice/Splice.cc src/protocols/splice/SpliceIn.cc src/protocols/splice/SpliceInAntibody.cc src/protocols/splice/SpliceInTail.cc src/protocols/splice/SpliceOut.cc src/protocols/switches/GraftSwitchMover.cc src/protocols/task_operations/JointSequenceOperation.cc src/protocols/task_operations/ProteinInterfaceDesignOperation.cc src/protocols/task_operations/SelectBySASAOperation.cc src/protocols/toolbox/match_enzdes_util/MatchConstraintFileInfo.cc
Test: linux.clang.performance

Failed sub-tests (click for more details):
protocols_ligand_docking_LigandDockProtocol
Test: linux.clang.profile

Failed sub-tests (click for more details):
loop_modeling
Test: ubuntu.gcc.unit.ubsan

Failed sub-tests (click for more details):
core:RDMolToRestypeTests:test_convert