DEME 2.3.0__tar.gz → 2.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {deme-2.3.0 → deme-2.3.2}/CMakeLists.txt +5 -0
- {deme-2.3.0/deme.egg-info → deme-2.3.2}/PKG-INFO +1 -1
- {deme-2.3.0 → deme-2.3.2/deme.egg-info}/PKG-INFO +1 -1
- {deme-2.3.0 → deme-2.3.2}/setup.py +1 -1
- {deme-2.3.0 → deme-2.3.2}/src/DEM/API.h +11 -6
- {deme-2.3.0 → deme-2.3.2}/src/DEM/APIPrivate.cpp +20 -18
- {deme-2.3.0 → deme-2.3.2}/src/DEM/APIPublic.cpp +94 -17
- {deme-2.3.0 → deme-2.3.2}/src/DEM/dT.cpp +1 -1
- {deme-2.3.0 → deme-2.3.2}/src/DEM/dT.h +1 -1
- {deme-2.3.0 → deme-2.3.2}/src/DEM/kT.cpp +1 -1
- {deme-2.3.0 → deme-2.3.2}/src/DEM/kT.h +1 -1
- {deme-2.3.0 → deme-2.3.2}/src/algorithms/CMakeLists.txt +1 -1
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/GpuManager.cpp +19 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/GpuManager.h +3 -1
- {deme-2.3.0 → deme-2.3.2}/LICENSE.md +0 -0
- {deme-2.3.0 → deme-2.3.2}/MANIFEST.in +0 -0
- {deme-2.3.0 → deme-2.3.2}/README.md +0 -0
- {deme-2.3.0 → deme-2.3.2}/cmake/CudaSupportedArchitectures.cmake +0 -0
- {deme-2.3.0 → deme-2.3.2}/cmake/CxxStdAutodetect.cmake +0 -0
- {deme-2.3.0 → deme-2.3.2}/cmake/DEMEConfig.cmake.in +0 -0
- {deme-2.3.0 → deme-2.3.2}/cmake/FixNinjaColors.cmake +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/clumps/3_clump.csv +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/clumps/6_clump.csv +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/clumps/ContactChain_initial.csv +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/clumps/TeddyBear.csv +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/clumps/ViperWheelSimple.csv +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/clumps/ellipsoid_2_1_1.csv +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/clumps/molecule.csv +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/clumps/spiky_sphere.csv +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/clumps/triangular_flat.csv +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/clumps/triangular_flat_6comp.csv +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/GPBR_Vessel_Fine.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/cone.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/cube.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/cyl_r1_h2.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/excavator.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/funnel.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/funnel_left.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/hourglass.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/hourglass_cap.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/internal_mixer.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/plane_20by20.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/rover_wheels/curiosity_wheel.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/rover_wheels/curiosity_wheel_surface.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/rover_wheels/viper_wheel_right.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/silo.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/sphere.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/mesh/thin_plate.obj +0 -0
- {deme-2.3.0 → deme-2.3.2}/data/sim_data/example_cnt_pairs.csv +0 -0
- {deme-2.3.0 → deme-2.3.2}/deme.egg-info/SOURCES.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/deme.egg-info/dependency_links.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/deme.egg-info/not-zip-safe +0 -0
- {deme-2.3.0 → deme-2.3.2}/deme.egg-info/requires.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/deme.egg-info/top_level.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/packaging_instructions.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/pyproject.toml +0 -0
- {deme-2.3.0 → deme-2.3.2}/setup.cfg +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/.format_all +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/DEM/AuxClasses.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/DEM/AuxClasses.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/DEM/BdrsAndObjs.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/DEM/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/DEM/Defines.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/DEM/HostSideHelpers.hpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/DEM/MeshUtils.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/DEM/Models.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/DEM/PyDEME.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/DEM/Structs.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/DEM/VariableTypes.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/DEM/utils/Samplers.hpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/algorithms/DEMCubContactDetection.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/algorithms/DEMCubForceCollection.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/algorithms/DEMCubInstantiations.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/algorithms/DEMCubWrappers.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/algorithms/DEMDynamicMisc.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/algorithms/DEMStaticDeviceSubroutines.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/algorithms/DEMStaticDeviceUtilities.cuh +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/ApiVersion.h.in +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/DebugInfo.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/CudaAllocator.hpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/DEMEPaths.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/DEMEPaths.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/DataMigrationHelper.hpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/GpuError.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/HeaderGenerator.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/JitHelper.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/JitHelper.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/ManagedMemory.hpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/RuntimeData.cpp.in +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/RuntimeData.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/ThreadManager.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/Timer.hpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/WavefrontMeshLoader.hpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/core/utils/csv.hpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_BallDrop.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_BallDrop2D.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_Centrifuge.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_ConePenetration.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_ContactChain.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_Electrostatic.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_FlexibleMesh.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_Fracture_Box.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_GRCPrep_Part1.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_GRCPrep_Part2.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_GRCPrep_Part3.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_GameOfLife.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_Hopper_Sphere_Cylinder.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_Indentation.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_Mixer.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_Plow.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_Repose.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_Repose2D.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_RotatingDrum.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_Shake.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_Sieve.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_SingleSphereCollide.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_SolarSystem.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_TestPack.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_WheelDP.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_WheelDPSimplified.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/DEMdemo_WheelSlopeSlip.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/pyDEME_BallDrop.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/pyDEME_BallDrop2D.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/pyDEME_Centrifuge.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/pyDEME_ConePenetration.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/pyDEME_Electrostatic.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/pyDEME_FlexibleMesh.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/pyDEME_GRCPrep_Part1.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/pyDEME_GameOfLife.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/pyDEME_Mixer.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/demo/pyDEME_WheelDPSimplified.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/CUDAMathHelpers.cuh +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMBinSphereKernels.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMBinTriangleKernels.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCalcForceKernels.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCollectForceKernels.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCollectForceKernels_Compact.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCollisionKernels.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMContactKernels_SphereSphere.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMContactKernels_SphereTriangle.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/AnalyticalCompDefJitify.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/ClumpCompAcqStratAllFlatten.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/ClumpCompAcqStratAllJitify.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/ClumpCompAcqStratPartialJitify.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/ClumpCompDefJitify.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/ContactInfoWriteBack.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/ForceInKernelReductionStrat.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/FrictionlessHertzianForceModel.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/FullHertzianForceModel.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/IntegrationVelPassOnCenteredDiff.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/IntegrationVelPassOnExtendedTaylor.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/IntegrationVelPassOnForwardEuler.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/MOIAcqStratFlatten.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/MOIAcqStratJitify.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/MOIDefJitify.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/MassAcqStratFlatten.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/MassAcqStratJitify.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMCustomizablePolicies/MassDefJitify.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMHelperKernels.cuh +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMHistoryMappingKernels.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMIntegrationKernels.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMMiscKernels.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMModeratorKernels.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMOwnerQueryKernels.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMPrepForceKernels.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMSphereQueryKernels.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMTriangleBoxIntersect.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMUserScripts/ForceModel2D.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMUserScripts/ForceModelMooring.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMUserScripts/ForceModelMooringPosition.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMUserScripts/ForceModelWithCohesion.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMUserScripts/ForceModelWithElectrostatic.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMUserScripts/ForceModelWithFractureModel.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/DEMUserScripts/ForceModelWithGravity.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/src/kernel/hello.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/.clang-format +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/.git +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/.gitignore +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/Doxyfile +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/LICENSE +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/Makefile +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/README.md +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/example_headers/class_arg_kernel.cuh +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/example_headers/constant_header.cuh +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/example_headers/my_header1.cuh +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/example_headers/my_header2.cuh +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/example_headers/my_header3.cuh +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/jitify.hpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/jitify_example.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/jitify_test.cu +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/nvrtc_cli.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/nvrtc_cli_test.sh +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/jitify/stringify.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.appveyor.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.clang-format +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.clang-tidy +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.cmake-format.yaml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.codespell-ignore-lines +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.git +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.gitattributes +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/CODEOWNERS +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/CONTRIBUTING.md +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/dependabot.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/labeler.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/labeler_merged.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/matchers/pylint.json +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/pull_request_template.md +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/workflows/ci.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/workflows/configure.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/workflows/format.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/workflows/labeler.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/workflows/pip.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.github/workflows/upstream.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.gitignore +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.pre-commit-config.yaml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/.readthedocs.yml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/LICENSE +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/MANIFEST.in +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/README.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/Doxyfile +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/Makefile +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/_static/css/custom.css +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/cast/chrono.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/cast/custom.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/cast/eigen.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/cast/functional.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/cast/index.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/cast/overview.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/cast/stl.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/cast/strings.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/classes.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/embedding.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/exceptions.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/functions.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/misc.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/pycpp/index.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/pycpp/numpy.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/pycpp/object.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/pycpp/utilities.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/advanced/smart_ptrs.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/basics.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/benchmark.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/benchmark.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/changelog.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/classes.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/cmake/index.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/compiling.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/conf.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/faq.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/index.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/installing.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/limitations.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/pybind11-logo.png +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/pybind11_vs_boost_python1.png +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/pybind11_vs_boost_python1.svg +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/pybind11_vs_boost_python2.png +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/pybind11_vs_boost_python2.svg +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/reference.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/release.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/requirements.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/docs/upgrade.rst +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/attr.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/buffer_info.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/cast.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/chrono.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/common.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/complex.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/detail/class.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/detail/common.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/detail/descr.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/detail/init.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/detail/internals.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/detail/type_caster_base.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/detail/typeid.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/eigen/matrix.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/eigen/tensor.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/eigen.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/embed.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/eval.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/functional.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/gil.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/iostream.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/numpy.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/operators.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/options.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/pybind11.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/pytypes.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/stl/filesystem.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/stl.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/include/pybind11/stl_bind.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/noxfile.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/pybind11/__init__.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/pybind11/__main__.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/pybind11/_version.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/pybind11/commands.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/pybind11/py.typed +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/pybind11/setup_helpers.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/pyproject.toml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/setup.cfg +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/setup.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/conftest.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/constructor_stats.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/cross_module_gil_utils.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/cross_module_interleaved_error_already_set.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/eigen_tensor_avoid_stl_array.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/env.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/extra_python_package/pytest.ini +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/extra_python_package/test_files.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/extra_setuptools/pytest.ini +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/extra_setuptools/test_setuphelper.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/local_bindings.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/object.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/pybind11_cross_module_tests.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/pybind11_tests.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/pybind11_tests.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/pytest.ini +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/requirements.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_async.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_async.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_buffers.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_buffers.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_builtin_casters.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_builtin_casters.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_call_policies.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_call_policies.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_callbacks.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_callbacks.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_chrono.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_chrono.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_class.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_class.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_cmake_build/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_cmake_build/embed.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_cmake_build/main.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_cmake_build/test.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_const_name.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_const_name.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_constants_and_functions.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_constants_and_functions.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_copy_move.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_copy_move.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_custom_type_casters.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_custom_type_casters.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_custom_type_setup.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_custom_type_setup.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_docstring_options.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_docstring_options.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_eigen_matrix.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_eigen_matrix.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_eigen_tensor.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_eigen_tensor.inl +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_eigen_tensor.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_embed/CMakeLists.txt +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_embed/catch.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_embed/external_module.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_embed/test_interpreter.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_embed/test_interpreter.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_embed/test_trampoline.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_enum.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_enum.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_eval.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_eval.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_eval_call.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_exceptions.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_exceptions.h +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_exceptions.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_factory_constructors.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_factory_constructors.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_gil_scoped.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_gil_scoped.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_iostream.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_iostream.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_kwargs_and_defaults.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_kwargs_and_defaults.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_local_bindings.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_local_bindings.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_methods_and_attributes.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_methods_and_attributes.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_modules.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_modules.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_multiple_inheritance.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_multiple_inheritance.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_numpy_array.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_numpy_array.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_numpy_dtypes.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_numpy_dtypes.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_numpy_vectorize.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_numpy_vectorize.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_opaque_types.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_opaque_types.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_operator_overloading.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_operator_overloading.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_pickling.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_pickling.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_pytypes.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_pytypes.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_sequences_and_iterators.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_sequences_and_iterators.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_smart_ptr.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_smart_ptr.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_stl.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_stl.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_stl_binders.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_stl_binders.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_tagbased_polymorphic.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_tagbased_polymorphic.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_thread.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_thread.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_union.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_union.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_virtual_functions.cpp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/test_virtual_functions.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/valgrind-numpy-scipy.supp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tests/valgrind-python.supp +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/FindCatch.cmake +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/FindEigen3.cmake +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/FindPythonLibsNew.cmake +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/JoinPaths.cmake +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/check-style.sh +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/cmake_uninstall.cmake.in +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/codespell_ignore_lines_from_errors.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/libsize.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/make_changelog.py +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/pybind11.pc.in +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/pybind11Common.cmake +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/pybind11Config.cmake.in +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/pybind11NewTools.cmake +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/pybind11Tools.cmake +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/pyproject.toml +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/setup_global.py.in +0 -0
- {deme-2.3.0 → deme-2.3.2}/thirdparty/pybind11/tools/setup_main.py.in +0 -0
|
@@ -342,6 +342,11 @@ file(COPY ${CMAKE_CURRENT_LIST_DIR}/src/kernel/ DESTINATION ${CMAKE_BINARY_DIR}/
|
|
|
342
342
|
file(COPY ${CMAKE_CURRENT_LIST_DIR}/src/DEM/Defines.h DESTINATION ${CMAKE_BINARY_DIR}/DEM)
|
|
343
343
|
file(COPY ${CMAKE_CURRENT_LIST_DIR}/src/DEM/VariableTypes.h DESTINATION ${CMAKE_BINARY_DIR}/DEM)
|
|
344
344
|
install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/src/kernel/ DESTINATION ${CMAKE_INSTALL_DATADIR}/DEME/kernel/)
|
|
345
|
+
install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/src/kernel/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/kernel/
|
|
346
|
+
FILES_MATCHING
|
|
347
|
+
PATTERN "*.cuh"
|
|
348
|
+
PATTERN "*.h"
|
|
349
|
+
)
|
|
345
350
|
|
|
346
351
|
# ---------------------------------------------------------------------------- #
|
|
347
352
|
# Build embedded demos
|
|
@@ -152,7 +152,7 @@ class CMakeBuild(build_ext):
|
|
|
152
152
|
# logic and declaration, and simpler if you include description/version in a file.
|
|
153
153
|
setup(
|
|
154
154
|
name="deme",
|
|
155
|
-
version="2.3.
|
|
155
|
+
version="2.3.2",
|
|
156
156
|
author="Ruochun Zhang",
|
|
157
157
|
author_email="ruochunz@gmail.com",
|
|
158
158
|
description="PyBind Wrapper Library for DEM-Engine",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
#include <set>
|
|
11
11
|
#include <cfloat>
|
|
12
12
|
#include <functional>
|
|
13
|
+
#include <memory>
|
|
13
14
|
|
|
14
15
|
#include "kT.h"
|
|
15
16
|
#include "dT.h"
|
|
@@ -49,7 +50,11 @@ class DEMTracker;
|
|
|
49
50
|
/// Main DEM-Engine solver.
|
|
50
51
|
class DEMSolver {
|
|
51
52
|
public:
|
|
53
|
+
/// Default constructor: scans available GPUs and uses at most 2.
|
|
52
54
|
DEMSolver(unsigned int nGPUs = 2);
|
|
55
|
+
/// Construct using explicit GPU device IDs. Errors if any ID is unavailable. Warns and uses the first 2 if more
|
|
56
|
+
/// than 2 are given.
|
|
57
|
+
DEMSolver(std::vector<int> device_ids);
|
|
53
58
|
~DEMSolver();
|
|
54
59
|
|
|
55
60
|
/// Set output detail level.
|
|
@@ -1807,12 +1812,12 @@ class DEMSolver {
|
|
|
1807
1812
|
// DEM system's workers, helpers, friends
|
|
1808
1813
|
////////////////////////////////////////////////////////////////////////////////
|
|
1809
1814
|
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1815
|
+
std::unique_ptr<GpuManager> dTkT_GpuManager;
|
|
1816
|
+
std::unique_ptr<ThreadManager> dTkT_InteractionManager;
|
|
1817
|
+
std::unique_ptr<WorkerReportChannel> dTMain_InteractionManager;
|
|
1818
|
+
std::unique_ptr<WorkerReportChannel> kTMain_InteractionManager;
|
|
1819
|
+
std::unique_ptr<DEMDynamicThread> dT;
|
|
1820
|
+
std::unique_ptr<DEMKinematicThread> kT;
|
|
1816
1821
|
|
|
1817
1822
|
////////////////////////////////////////////////////////////////////////////////
|
|
1818
1823
|
// DEM system's private methods
|
|
@@ -579,7 +579,9 @@ void DEMSolver::decideCDMarginStrat() {
|
|
|
579
579
|
|
|
580
580
|
void DEMSolver::reportInitStats() const {
|
|
581
581
|
DEME_INFO("\n");
|
|
582
|
-
|
|
582
|
+
|
|
583
|
+
DEME_INFO("Number of system devices detected: %d", GpuManager::scanNumDevices());
|
|
584
|
+
DEME_INFO("Number of active devices used by DEME: %d", dTkT_GpuManager->getNumDevices());
|
|
583
585
|
|
|
584
586
|
DEME_INFO("User-specified X-dimension range: [%.7g, %.7g]", m_user_box_min.x, m_user_box_max.x);
|
|
585
587
|
DEME_INFO("User-specified Y-dimension range: [%.7g, %.7g]", m_user_box_min.y, m_user_box_max.y);
|
|
@@ -1282,8 +1284,8 @@ void DEMSolver::packDataPointers() {
|
|
|
1282
1284
|
kT->packDataPointers();
|
|
1283
1285
|
// Each worker thread needs pointers used for data transfering. Note this step must be done after packDataPointers
|
|
1284
1286
|
// are called, so each thread has its own pointers packed.
|
|
1285
|
-
dT->packTransferPointers(kT);
|
|
1286
|
-
kT->packTransferPointers(dT);
|
|
1287
|
+
dT->packTransferPointers(kT.get());
|
|
1288
|
+
kT->packTransferPointers(dT.get());
|
|
1287
1289
|
// Finally, the API needs to map all mesh to their owners
|
|
1288
1290
|
for (const auto& mmesh : m_meshes) {
|
|
1289
1291
|
m_owner_mesh_map[mmesh->owner] = mmesh->cache_offset;
|
|
@@ -1315,21 +1317,21 @@ void DEMSolver::validateUserInputs() {
|
|
|
1315
1317
|
// LoadClumpType.");
|
|
1316
1318
|
// }
|
|
1317
1319
|
|
|
1318
|
-
// If not 2 GPUs detected, output warnings as needed
|
|
1319
|
-
int ndevices = dTkT_GpuManager->getNumDevices();
|
|
1320
|
-
if (ndevices == 0) {
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
} else if (ndevices > 2) {
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
}
|
|
1320
|
+
// // If not 2 GPUs detected, output warnings as needed
|
|
1321
|
+
// int ndevices = dTkT_GpuManager->getNumDevices();
|
|
1322
|
+
// if (ndevices == 0) {
|
|
1323
|
+
// DEME_ERROR(
|
|
1324
|
+
// "No GPU device is detected. Try lspci and see what you get.\nIf you indeed have GPU devices, maybe you "
|
|
1325
|
+
// "should try rebooting or reinstalling cuda components?");
|
|
1326
|
+
// // } else if (ndevices == 1) {
|
|
1327
|
+
// // DEME_WARNING(
|
|
1328
|
+
// // "One GPU device is detected. On consumer cards, DEME's performance edge is limited with only one"
|
|
1329
|
+
// // "GPU.\nTry allocating 2 GPU devices if possible.");
|
|
1330
|
+
// } else if (ndevices > 2) {
|
|
1331
|
+
// DEME_WARNING(
|
|
1332
|
+
// "More than two GPU devices are detected.\nCurrently, DEME can make use of at most two devices.\nMore "
|
|
1333
|
+
// "devices will not improve the performance.");
|
|
1334
|
+
// }
|
|
1333
1335
|
|
|
1334
1336
|
// Box size OK?
|
|
1335
1337
|
float3 user_box_size = m_user_box_max - m_user_box_min;
|
|
@@ -21,36 +21,113 @@
|
|
|
21
21
|
namespace deme {
|
|
22
22
|
|
|
23
23
|
DEMSolver::DEMSolver(unsigned int nGPUs) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
if (nGPUs == 0) {
|
|
25
|
+
DEME_ERROR("DEMSolver was set to use 0 GPUs and that is currently not supported.");
|
|
26
|
+
}
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
dTkT_InteractionManager = std::make_unique<ThreadManager>();
|
|
29
|
+
kTMain_InteractionManager = std::make_unique<WorkerReportChannel>();
|
|
30
|
+
dTMain_InteractionManager = std::make_unique<WorkerReportChannel>();
|
|
30
31
|
|
|
31
32
|
// Set default solver params
|
|
32
33
|
setDefaultSolverParams();
|
|
33
34
|
|
|
35
|
+
// Determine which device IDs to use: scan available GPUs, use at most 2
|
|
36
|
+
int detected = GpuManager::scanNumDevices();
|
|
37
|
+
if (nGPUs > 2) {
|
|
38
|
+
DEME_WARNING("DEMSolver was requested to use %u GPUs, but at most 2 are supported. Using 2 GPUs.", nGPUs);
|
|
39
|
+
nGPUs = 2;
|
|
40
|
+
}
|
|
41
|
+
// Build a 2-element device ID list (one per thread); both threads share the same device when using 1 GPU
|
|
42
|
+
unsigned int nToUse = std::min((unsigned int)detected, nGPUs);
|
|
43
|
+
std::vector<int> device_ids;
|
|
44
|
+
if (nToUse >= 2) {
|
|
45
|
+
device_ids = {0, 1};
|
|
46
|
+
} else {
|
|
47
|
+
device_ids = {0, 0};
|
|
48
|
+
}
|
|
49
|
+
// Always use id list to avoid GpuManager deciding device usage by itself
|
|
50
|
+
dTkT_GpuManager = std::make_unique<GpuManager>(device_ids);
|
|
51
|
+
|
|
34
52
|
// Thread-based worker creation may be needed as the workers allocate DualStructs on construction
|
|
35
53
|
std::thread dT_construct([&]() {
|
|
36
54
|
// Get a device/stream ID to use from the GPU Manager
|
|
37
55
|
const GpuManager::StreamInfo dT_stream_info = dTkT_GpuManager->getAvailableStream();
|
|
38
56
|
DEME_GPU_CALL(cudaSetDevice(dT_stream_info.device));
|
|
39
|
-
dT =
|
|
57
|
+
dT = std::make_unique<DEMDynamicThread>(dTMain_InteractionManager.get(), dTkT_InteractionManager.get(),
|
|
58
|
+
dT_stream_info);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
std::thread kT_construct([&]() {
|
|
62
|
+
const GpuManager::StreamInfo kT_stream_info = dTkT_GpuManager->getAvailableStream();
|
|
63
|
+
DEME_GPU_CALL(cudaSetDevice(kT_stream_info.device));
|
|
64
|
+
kT = std::make_unique<DEMKinematicThread>(kTMain_InteractionManager.get(), dTkT_InteractionManager.get(),
|
|
65
|
+
kT_stream_info);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
dT_construct.join();
|
|
69
|
+
kT_construct.join();
|
|
70
|
+
|
|
71
|
+
// Make friends
|
|
72
|
+
dT->kT = kT.get();
|
|
73
|
+
kT->dT = dT.get();
|
|
74
|
+
|
|
75
|
+
// Specify force model
|
|
76
|
+
m_force_model[DEFAULT_FORCE_MODEL_NAME] =
|
|
77
|
+
std::make_shared<DEMForceModel>(std::move(DEMForceModel(FORCE_MODEL::HERTZIAN)));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
DEMSolver::DEMSolver(std::vector<int> device_ids) {
|
|
81
|
+
dTkT_InteractionManager = std::make_unique<ThreadManager>();
|
|
82
|
+
kTMain_InteractionManager = std::make_unique<WorkerReportChannel>();
|
|
83
|
+
dTMain_InteractionManager = std::make_unique<WorkerReportChannel>();
|
|
84
|
+
|
|
85
|
+
// Set default solver params
|
|
86
|
+
setDefaultSolverParams();
|
|
87
|
+
|
|
88
|
+
// Validate device IDs against the number of physically available GPUs
|
|
89
|
+
int detected = GpuManager::scanNumDevices();
|
|
90
|
+
if (device_ids.empty()) {
|
|
91
|
+
DEME_ERROR("DEMSolver was given an empty device ID list. Please provide at least one device ID.");
|
|
92
|
+
}
|
|
93
|
+
for (int id : device_ids) {
|
|
94
|
+
if (id < 0 || id >= detected) {
|
|
95
|
+
DEME_ERROR("DEMSolver was given device ID %d, but only %d GPU device(s) are available.", id, detected);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (device_ids.size() > 2) {
|
|
99
|
+
DEME_WARNING("DEMSolver was given %zu device IDs, but at most 2 are supported. Using only the first 2.",
|
|
100
|
+
device_ids.size());
|
|
101
|
+
device_ids.resize(2);
|
|
102
|
+
}
|
|
103
|
+
// When only one device is specified, both threads run on that device
|
|
104
|
+
if (device_ids.size() == 1) {
|
|
105
|
+
device_ids = {device_ids[0], device_ids[0]};
|
|
106
|
+
}
|
|
107
|
+
// Always use id list to avoid GpuManager deciding device usage by itself
|
|
108
|
+
dTkT_GpuManager = std::make_unique<GpuManager>(device_ids);
|
|
109
|
+
|
|
110
|
+
// Thread-based worker creation may be needed as the workers allocate DualStructs on construction
|
|
111
|
+
std::thread dT_construct([&]() {
|
|
112
|
+
const GpuManager::StreamInfo dT_stream_info = dTkT_GpuManager->getAvailableStream();
|
|
113
|
+
DEME_GPU_CALL(cudaSetDevice(dT_stream_info.device));
|
|
114
|
+
dT = std::make_unique<DEMDynamicThread>(dTMain_InteractionManager.get(), dTkT_InteractionManager.get(),
|
|
115
|
+
dT_stream_info);
|
|
40
116
|
});
|
|
41
117
|
|
|
42
118
|
std::thread kT_construct([&]() {
|
|
43
119
|
const GpuManager::StreamInfo kT_stream_info = dTkT_GpuManager->getAvailableStream();
|
|
44
120
|
DEME_GPU_CALL(cudaSetDevice(kT_stream_info.device));
|
|
45
|
-
kT =
|
|
121
|
+
kT = std::make_unique<DEMKinematicThread>(kTMain_InteractionManager.get(), dTkT_InteractionManager.get(),
|
|
122
|
+
kT_stream_info);
|
|
46
123
|
});
|
|
47
124
|
|
|
48
125
|
dT_construct.join();
|
|
49
126
|
kT_construct.join();
|
|
50
127
|
|
|
51
128
|
// Make friends
|
|
52
|
-
dT->kT = kT;
|
|
53
|
-
kT->dT = dT;
|
|
129
|
+
dT->kT = kT.get();
|
|
130
|
+
kT->dT = dT.get();
|
|
54
131
|
|
|
55
132
|
// Specify force model
|
|
56
133
|
m_force_model[DEFAULT_FORCE_MODEL_NAME] =
|
|
@@ -60,12 +137,12 @@ DEMSolver::DEMSolver(unsigned int nGPUs) {
|
|
|
60
137
|
DEMSolver::~DEMSolver() {
|
|
61
138
|
if (sys_initialized)
|
|
62
139
|
DoDynamicsThenSync(0.0);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
140
|
+
kT.reset();
|
|
141
|
+
dT.reset();
|
|
142
|
+
kTMain_InteractionManager.reset();
|
|
143
|
+
dTMain_InteractionManager.reset();
|
|
144
|
+
dTkT_InteractionManager.reset();
|
|
145
|
+
dTkT_GpuManager.reset();
|
|
69
146
|
}
|
|
70
147
|
|
|
71
148
|
void DEMSolver::SetVerbosity(const std::string& verbose) {
|
|
@@ -1919,13 +1996,13 @@ std::shared_ptr<DEMMeshConnected> DEMSolver::AddWavefrontMeshObject(const std::s
|
|
|
1919
1996
|
}
|
|
1920
1997
|
|
|
1921
1998
|
std::shared_ptr<DEMInspector> DEMSolver::CreateInspector(const std::string& quantity) {
|
|
1922
|
-
DEMInspector insp(this, this->dT, quantity);
|
|
1999
|
+
DEMInspector insp(this, this->dT.get(), quantity);
|
|
1923
2000
|
m_inspectors.push_back(std::make_shared<DEMInspector>(std::move(insp)));
|
|
1924
2001
|
return m_inspectors.back();
|
|
1925
2002
|
}
|
|
1926
2003
|
|
|
1927
2004
|
std::shared_ptr<DEMInspector> DEMSolver::CreateInspector(const std::string& quantity, const std::string& region) {
|
|
1928
|
-
DEMInspector insp(this, this->dT, quantity, region);
|
|
2005
|
+
DEMInspector insp(this, this->dT.get(), quantity, region);
|
|
1929
2006
|
m_inspectors.push_back(std::make_shared<DEMInspector>(std::move(insp)));
|
|
1930
2007
|
return m_inspectors.back();
|
|
1931
2008
|
}
|
|
@@ -269,7 +269,7 @@ bodyID_t DEMDynamicThread::getGeoOwnerID(const bodyID_t& geoB, const contact_t&
|
|
|
269
269
|
}
|
|
270
270
|
|
|
271
271
|
// packTransferPointers
|
|
272
|
-
void DEMDynamicThread::packTransferPointers(DEMKinematicThread
|
|
272
|
+
void DEMDynamicThread::packTransferPointers(DEMKinematicThread* kT) {
|
|
273
273
|
// These are the pointers for sending data to dT
|
|
274
274
|
granData->pKTOwnedBuffer_absVel = kT->absVel_buffer.data();
|
|
275
275
|
granData->pKTOwnedBuffer_voxelID = kT->voxelID_buffer.data();
|
|
@@ -575,7 +575,7 @@ class DEMDynamicThread {
|
|
|
575
575
|
|
|
576
576
|
/// Put sim data array pointers in place
|
|
577
577
|
void packDataPointers();
|
|
578
|
-
void packTransferPointers(DEMKinematicThread
|
|
578
|
+
void packTransferPointers(DEMKinematicThread* kT);
|
|
579
579
|
|
|
580
580
|
// Move array data to or from device
|
|
581
581
|
void migrateDataToDevice();
|
|
@@ -525,7 +525,7 @@ void DEMKinematicThread::migrateDeviceModifiableInfoToHost() {
|
|
|
525
525
|
migrateFamilyToHost();
|
|
526
526
|
}
|
|
527
527
|
|
|
528
|
-
void DEMKinematicThread::packTransferPointers(DEMDynamicThread
|
|
528
|
+
void DEMKinematicThread::packTransferPointers(DEMDynamicThread* dT) {
|
|
529
529
|
// Set the pointers to dT owned buffers
|
|
530
530
|
granData->pDTOwnedBuffer_nContactPairs = &(dT->nContactPairs_buffer);
|
|
531
531
|
granData->pDTOwnedBuffer_idGeometryA = dT->idGeometryA_buffer.data();
|
|
@@ -342,7 +342,7 @@ class DEMKinematicThread {
|
|
|
342
342
|
|
|
343
343
|
// Put sim data array pointers in place
|
|
344
344
|
void packDataPointers();
|
|
345
|
-
void packTransferPointers(DEMDynamicThread
|
|
345
|
+
void packTransferPointers(DEMDynamicThread* dT);
|
|
346
346
|
|
|
347
347
|
// Move array data to or from device
|
|
348
348
|
void migrateDataToDevice();
|
|
@@ -53,7 +53,7 @@ target_sources(
|
|
|
53
53
|
)
|
|
54
54
|
|
|
55
55
|
# Get a list of supported architectures
|
|
56
|
-
include(
|
|
56
|
+
include(../../cmake/CudaSupportedArchitectures.cmake)
|
|
57
57
|
cuda_supported_architectures()
|
|
58
58
|
|
|
59
59
|
# Convert the cuda supported architectures into their respective CMake properties
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#include <algorithm>
|
|
2
|
+
#include <set>
|
|
2
3
|
#include <stdexcept>
|
|
3
4
|
#include <iostream>
|
|
4
5
|
|
|
@@ -32,6 +33,24 @@ GpuManager::GpuManager(unsigned int total_streams) {
|
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
GpuManager::GpuManager(const std::vector<int>& device_ids) {
|
|
37
|
+
// ndevices counts distinct physical devices in use
|
|
38
|
+
std::set<int> unique_ids(device_ids.begin(), device_ids.end());
|
|
39
|
+
ndevices = static_cast<int>(unique_ids.size());
|
|
40
|
+
|
|
41
|
+
if (!device_ids.empty()) {
|
|
42
|
+
int max_id = *std::max_element(device_ids.begin(), device_ids.end());
|
|
43
|
+
this->streams.resize(max_id + 1);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Each entry in device_ids creates one stream; duplicate device IDs are intentional and result in multiple
|
|
47
|
+
// streams on the same device (used when both kT and dT threads run on the same physical device).
|
|
48
|
+
for (int dev_id : device_ids) {
|
|
49
|
+
cudaStream_t new_stream = nullptr;
|
|
50
|
+
this->streams[dev_id].push_back(StreamInfo{dev_id, new_stream, false});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
35
54
|
// TODO: add CUDA error checking
|
|
36
55
|
GpuManager::~GpuManager() {
|
|
37
56
|
for (auto outer = this->streams.begin(); outer != this->streams.end(); outer++) {
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
class GpuManager {
|
|
10
10
|
public:
|
|
11
11
|
GpuManager(unsigned int total_streams = 1);
|
|
12
|
+
// Construct using explicit device IDs (one stream per device ID).
|
|
13
|
+
GpuManager(const std::vector<int>& device_ids);
|
|
12
14
|
~GpuManager();
|
|
13
15
|
|
|
14
16
|
struct StreamInfo {
|
|
@@ -24,7 +26,7 @@ class GpuManager {
|
|
|
24
26
|
// Returns the HIGHEST number of streams per device.
|
|
25
27
|
unsigned int getMaxStreamsPerDevice();
|
|
26
28
|
|
|
27
|
-
int scanNumDevices();
|
|
29
|
+
static int scanNumDevices();
|
|
28
30
|
|
|
29
31
|
// DO NOT USE UNLESS YOU INTEND TO MANUALLY HANDLE YOUR STREAMS.
|
|
30
32
|
const std::vector<StreamInfo>& getStreamsFromDevice(int index);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|