Closed akenmorris closed 12 months ago
In a project with 14 domains and 1024 particles, after the 1024 particle split, shapeworks optimization crashes
split number = 10 Particle count: 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 1024 zsh: segmentation fault (core dumped)
stack trace:
#0 __memset_avx2_unaligned_erms () at ../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S:351 #1 0x000055f13aaf50e1 in _mm_store_pd(double*, double __vector(2)) (__A=..., __P=<optimized out>) at /usr/lib/gcc/x86_64-linux-gnu/12/include/emmintrin.h:166 #2 Eigen::internal::pstore<double, double __vector(2)>(double*, double __vector(2) const&) (from=..., to=<optimized out>) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h:790 #3 Eigen::internal::pstoret<double, double __vector(2), 16>(double*, double __vector(2) const&) (from=..., to=<optimized out>) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/GenericPacketMath.h:978 #4 Eigen::internal::assign_op<double, double>::assignPacket<16, double __vector(2)>(double*, double __vector(2) const&) const (b=..., a=<optimized out>, this=<optimized out>) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h:28 #5 Eigen::internal::generic_dense_assignment_kernel<Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> > >, Eigen::internal::evaluator<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 1, -1, -1> > >, Eigen::internal::assign_op<double, double>, 0>::assignPacket<16, 0, double __vector(2)>(long) (index=<optimized out>, this=<optimized out>) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/AssignEvaluator.h:681 #6 Eigen::internal::dense_assignment_loop<Eigen::internal::generic_dense_assignment_kernel<Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> > >, Eigen::internal::evaluator<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 1, -1, -1> > >, Eigen::internal::assign_op<double, double>, 0>, 3, 0>::run ( kernel=<synthetic pointer>...) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/AssignEvaluator.h:437 #7 Eigen::internal::call_dense_assignment_loop<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 1, -1, -1> >, Eigen::internal::assign_op<double, double> > (func=..., src=..., dst=...) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/AssignEvaluator.h:785 #8 Eigen::internal::Assignment<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 1, -1, -1> >, Eigen::internal::assign_op<double, double>, Eigen::internal::Dense2Dense, void>::run (func=..., src=..., dst=...) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/AssignEvaluator.h:954 #9 Eigen::internal::call_assignment_no_alias<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 1, -1, -1> >, Eigen::internal::assign_op<double, double> > (func=..., src=..., dst=...) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/AssignEvaluator.h:890 #10 Eigen::internal::call_assignment<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 1, -1, -1> >, Eigen::internal::assign_op<double, double> >(Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >&, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 1, -1, -1> > const&, Eigen::internal::assign_op<double, double> const&, Eigen::internal::enable_if<!Eigen::internal::evaluator_assume_aliasing<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 1, -1, -1> >, Eigen::internal::evaluator_traits<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 1, -1, -1> > >::Shape>::value, void*>::type) (func=..., src=..., dst=...) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/AssignEvaluator.h:858 #11 Eigen::internal::call_assignment<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 1, -1, -1> > > (src=..., dst=...) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/AssignEvaluator.h:836 #12 Eigen::MatrixBase<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> > >::operator=<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, -1, 1, -1, -1> > > (other=..., this=0x7fff58aefaa0) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/Assign.h:66 #13 Eigen::DenseBase<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> > >::setConstant (val=<optimized out>, this=0x7fff58aefaa0) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/CwiseNullaryOp.h:347 #14 Eigen::DenseBase<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> > >::setZero (this=0x7fff58aefaa0) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/CwiseNullaryOp.h:548 #15 Eigen::internal::generic_product_impl<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1> const, 0, Eigen::Stride<0, 0> >, Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1> const, 0, Eigen::Stride<0, 0> >, Eigen::DenseShape, Eigen::DenseShape, 8>::evalTo<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> > > (rhs=..., lhs=..., dst=...) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h:444 #16 Eigen::internal::Assignment<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >, Eigen::Product<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1> const, 0, Eigen::Stride<0, 0> >, Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1> const, 0, Eigen::Stride<0, 0> >, 0>, Eigen::internal::assign_op<double, double>, Eigen::internal::Dense2Dense, void>::run (src=..., dst=...) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/ProductEvaluators.h:148 #17 Eigen::internal::call_assignment_no_alias<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >, Eigen::Product<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1> const, 0, Eigen::Stride<0, 0> >, Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1> const, 0, Eigen::Stride<0, 0> >, 0>, Eigen::internal::assign_op<double, double> > (func=..., src=..., dst=...) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/AssignEvaluator.h:890 #18 Eigen::NoAlias<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1>, 0, Eigen::Stride<0, 0> >, Eigen::MatrixBase>::operator=<Eigen::Product<Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1> const, 0, Eigen::Stride<0, 0> >, Eigen::Map<Eigen::Matrix<double, -1, -1, 1, -1, -1> const, 0, Eigen::Stride<0, 0> >, 0> > (other=..., this=<optimized out>) at /home/amorris/miniconda3/envs/shapeworks/include/eigen3/Eigen/src/Core/NoAlias.h:43 #19 Utils::multiply_into<double> (out=..., lhs=..., rhs=...) at /home/amorris/sci/shapeworks/Libs/Utils/Utils.cpp:420 #20 0x000055f13a997fca in shapeworks::CorrespondenceFunction::ComputeUpdates (this=0x55f13d873e10, c=0x55f13d870640) at /usr/include/c++/12/bits/shared_ptr_base.h:1665 #21 0x000055f13aa0464e in shapeworks::DualVectorFunction::BeforeIteration (this=0x55f13d85fa50) at /home/amorris/sci/shapeworks/Libs/Optimize/Function/DualVectorFunction.h:263 #22 0x000055f13a9a31e2 in shapeworks::GradientDescentOptimizer::StartAdaptiveGaussSeidelOptimization (this=0x55f13d838d10) at /home/amorris/sci/shapeworks/Libs/Optimize/GradientDescentOptimizer.cpp:92 #23 0x000055f13a9bc921 in shapeworks::Optimize::Initialize (this=this@entry=0x7fff58af06e0) at /home/amorris/sci/shapeworks/Libs/Optimize/Optimize.cpp:685 #24 0x000055f13a9bd628 in shapeworks::Optimize::Run (this=this@entry=0x7fff58af06e0) at /home/amorris/sci/shapeworks/Libs/Optimize/Optimize.cpp:173 #25 0x000055f1397793e5 in shapeworks::OptimizeCommand::execute (this=<optimized out>, options=..., sharedData=...) at /home/amorris/sci/shapeworks/Applications/shapeworks/Commands.cpp:143 #26 0x000055f1397731b8 in shapeworks::Command::run (this=<optimized out>, sharedData=...) at /home/amorris/sci/shapeworks/Applications/shapeworks/Command.cpp:27 #27 0x000055f13976456a in shapeworks::Executable::run (this=this@entry=0x7fff58af1160, arguments=..., sharedData=...) at /home/amorris/sci/shapeworks/Applications/shapeworks/Executable.cpp:94 #28 0x000055f139767fbd in shapeworks::Executable::run (this=this@entry=0x7fff58af1160, argc=argc@entry=5, argv=argv@entry=0x7fff58af1528) at /home/amorris/sci/shapeworks/Applications/shapeworks/Executable.cpp:128 #29 0x000055f13976243f in main (argc=5, argv=0x7fff58af1528) at /home/amorris/sci/shapeworks/Applications/shapeworks/shapeworks.cpp:114
I believe this is in the Utils::multiply_into call that performs the matrix multiplication for the covariance matrix.
Utils::multiply_into
In a project with 14 domains and 1024 particles, after the 1024 particle split, shapeworks optimization crashes
stack trace:
I believe this is in the
Utils::multiply_into
call that performs the matrix multiplication for the covariance matrix.