Code Monkey home page Code Monkey logo

elemental's Introduction

Build Status Join the chat at https://gitter.im/elemental/chat

Elemental is a modern C++ library for distributed-memory dense and sparse-direct linear algebra, conic optimization, and lattice reduction. The library was initially released in Elemental: A new framework for distributed memory dense linear algebra and absorbed, then greatly expanded upon, the functionality from the sparse-direct solver Clique, which was originally released during a project on Parallel Sweeping Preconditioners.

Deprecation notice

Elemental has not been maintained since 2016. But the project was forked by Lawrence Livermore National Lab. The author stopped being interested in volunteering to develop MPI codes and no one has stepped up after three years.

Software consists of teams of people. If you want people to continue developing a project after it ceases to be their personal interest, fund them for it.

The developer is now volunteering time towards high-performance math software for workstations at hodgestar.com.

Documentation

The (now outdated) documentation for Elemental is built using Sphinx and the Read the Docs Theme

Unique features

Elemental supports a wide collection of sequential and distributed-memory functionality, including sequential and distributed-memory support for the datatypes:

  • float, El::Complex<float>
  • double, El::Complex<double>
  • El::DoubleDouble, El::Complex<El::DoubleDouble> (on top of QD's dd_real)
  • El::QuadDouble, El::Complex<El::QuadDouble> (on top of QD's qd_real)
  • El::Quad, El::Complex<El::Quad> (on top of GCC's __float128)
  • El::BigFloat, El::Complex<El::BigFloat> (on top of MPFR's mpfr_t and MPC's mpc_t)

Linear algebra:

  • Dense and sparse-direct (generalized) Least Squares problems
    • Least Squares / Minimum Length
    • Tikhonov (and ridge) regression
    • Equality-constrained Least Squares
    • General (Gauss-Markov) Linear Models
  • High-performance pseudospectral computation and visualization
  • Aggressive Early Deflation Schur decompositions (currently sequential only)
  • Blocked column-pivoted QR via Johnson-Lindenstrauss
  • Quadratic-time low-rank Cholesky and LU modifications
  • Bunch-Kaufman and Bunch-Parlett for accurate symmetric factorization
  • LU and Cholesky with full pivoting
  • Column-pivoted QR and interpolative/skeleton decompositions
  • Quadratically Weighted Dynamic Halley iteration for the polar decomposition
  • Many algorithms for Singular-Value soft-Thresholding (SVT)
  • Tall-skinny QR decompositions
  • Hermitian matrix functions
  • Prototype Spectral Divide and Conquer Schur decomposition and Hermitian EVD
  • Sign-based Lyapunov/Ricatti/Sylvester solvers
  • Arbitrary-precision distributed SVD (QR and D&C support), (generalized) Hermitian EVPs (QR and D&C support), and Schur decompositions (e.g., via Aggressive Early Deflation)

Convex optimization:

  • Dense and sparse Interior Point Methods for Linear, Quadratic, and Second-Order Cone Programs (Note: Scalability for sparse IPMs will be lacking until more general sparse matrix distributions are introduced into Elemental)
    • Basis Pursuit
    • Chebyshev Points
    • Dantzig selectors
    • LASSO / Basis Pursuit Denoising
    • Least Absolute Value regression
    • Non-negative Least Squares
    • Support Vector Machines
    • (1D) Total Variation
  • Jordan algebras over products of Second-Order Cones
  • Various prototype dense Alternating Direction Method of Multipliers routines
    • Sparse inverse covariance selection
    • Robust Principal Component Analysis
  • Prototype alternating direction Non-negative Matrix Factorization

Lattice reduction:

  • An extension of Householder-based LLL to real and complex linearly-dependent bases (currently sequential only)
  • Generalizations of BKZ 2.0 to complex bases (currently sequential only) incorporating "y-sparse" enumeration
  • Integer images/kernels and relation-finding (currently sequential only)

The current development roadmap

Core data structures:

  • (1a) Eliminate DistMultiVec in favor of the newly extended DistMatrix
  • (1b) Extend DistSparseMatrix to support elementwise and blockwise 2D distributions

Linear algebra:

  • (2a) Distributed iterative refinement tailored to two right-hand sides [weakly depends on (1a)]
  • (2b) Extend black-box iterative refinement to DistMatrix
  • (2c) Incorporate iterative refinement into linear solvers via optional control structure [weakly depends upon (2b)]
  • (2d) Support for the Fix-Heiberger method for accurate generalized Hermitian-definite EVPs

Convex optimization:

  • (3a) Add support for homogeneous self-dual embeddings [weakly depends on (2a)]
  • (3b) Enhance sparse scalability via low edge-degree plus low-rank decompositions [depends on (1b); weakly depends on (1a)]
  • (3c) Distributed sparse semidefinite programs via chordal decompositions [weakly depends on (3b)]

License

The vast majority of Elemental is distributed under the terms of the New BSD License. Please see the debian/copyright file for an overview of the copyrights and licenses for the files in the library.

The optional external dependency METIS is distributed under the (equally permissive) Apache License, Version 2.0, though ParMETIS can only be used for research purposes (and can be easily disabled). libquadmath is distributed under the terms of the GNU Lesser General Public License, version 2.1 or later, while, QD is distributed under the terms of the LBNL-BSD-License.

Dependencies

Intranodal linear algebra

OpenBLAS is automatically downloaded and installed if no vendor/tuned BLAS/LAPACK is detected.

Intranodal graph partitioning

  • METIS
  • ParMETIS (Note: commercial users must disable this option during configuration)

If ParMETIS is not disabled and cannot be found (including access to internal APIs), then it is automatically downloaded and installed; otherwise, if METIS support is not detected, METIS is downloaded and installed.

Internodal linear algebra

If ScaLAPACK support is not explicitly disabled, then Elemental looks for a previous installation and, failing that, attempts to automatically download and install the library.

Internodal communication

Auxiliary libraries

Python interface

C++ visualization

  • Qt5 (optional for visualization from C++)

Build system

Third-party interfaces

In addition to the C++11, C, and Python interfaces included within the project, three external interfaces are currently being externally developed:

Related open-source projects

Distributed dense linear algebra:

Distributed sparse-direct linear algebra:

Distributed linear algebra Frameworks

Convex optimization

Lattice reduction and number theory

elemental's People

Contributors

ahmadia avatar aidangg avatar andreasnoack avatar benson31 avatar davidsblom avatar davydden avatar evaleev avatar jakebolewski avatar jedbrown avatar jeffhammond avatar jiahao avatar jm1 avatar justusc avatar karlrupp avatar mcg1969 avatar mcneish1 avatar mcopik avatar ndryden avatar poulson avatar restrin avatar rhl- avatar rocanale avatar rools32 avatar stefanozampini avatar timmoon10 avatar tkelman avatar xantares avatar yingzhouli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

elemental's Issues

Missing glue between DistSparseMatrix and numpy

While there is rudimentary capability for creating a numpy 2D array around the existing buffer of Matrix (and the local portion of DistMatrix), there is not yet any means of conveniently pushing/pulling numpy sparse matrices to/from DistSparseMatrix.

@ajfriend

add large-count support

Jack and I discussed this feature on the email list. I am adding it as a Github issue to make it harder for me to forget.

This is an archive of the commentary of interest:

Jeff:

I should add that there should be a much more elegant way to do this:

Type_contig
Type_commit
Foo
Type_free

Eg a C++ object on stack that calls Type_{contig,commit} in its constructor and Type_free in its destructor.

Can someone can point me to a good example of that pattern (I know it's used a lot for mutexes)?

Jack:

Elemental's CallStackEntry class behaves analogously:

https://github.com/elemental/Elemental/blob/3cef6bb7a8103db4648055378cdd7174b19b9e96/include/elemental/core/environment/decl.hpp#L177

See https://github.com/jeffhammond/BigMPI for a much more extensive commentary on large-count support in MPI and a C implementation of what should eventually be integrated into Elemental.

Minimum versus target tolerances for IPMs

Since it is often difficult to predict whether or not a particular accuracy is achievable within an IPM, it would be preferred for the solvers to be configurable so that the user can specify both a minimum and target convergence tolerance, with an exception only being thrown if the minimum tolerance could not be achieved (but iteration continuing until either the target tolerance is achieved or an instability is encountered).

CMakeLists:PYTHON_SITE_PACKAGES logic incorrect

  1. CMake does not correctly ignore PYTHON_SITE_PACKAGES when INSTALL_PYTHON_PACKAGE=OFF ; when doing make install, it will still attempt to build and install the Python package to PYTHON_SITE_PACKAGES. Erasing PYTHON_SITE_PACKAGES avoided this issue.
  2. CMake does not check that the current user has write permissions to PYTHON_SITE_PACKAGES, thus causing the build to fail during make install for users who do not have write permissions to the systemwide PYTHON_SITE_PACKAGES. Instead, it may be more sensible to detect for write permissions, falling back to installing at the user level instead.

include/El/lapack-like/decomp.hpp:256:26: note: previous definition is here Int a, Int b, SortType sort=UNSORTED,

Did I fail to set something correctly or is this a real bug?

CMake invocation:

Jeffs-MacBook-Air:build-rma jhammond$ cmake .. -DCMAKE_CXX_COMPILER=/opt/mpich/dev/clang/debug/bin/mpicxx -DCMAKE_C_COMPILER=/opt/mpich/dev/clang/debug/bin/mpicc -DCMAKE_Fortran_COMPILER=gfortran -DMATH_LIBS="-framework Accelerate" && make -j2

MPI info:

Jeffs-MacBook-Air:build-rma jhammond$ /opt/mpich/dev/clang/debug/bin/mpicxx -show
clang++ -I/opt/mpich/dev/clang/debug/include -L/opt/mpich/dev/clang/debug/lib -lmpicxx -lmpi -lpmpi -lpthread

Compiler info:

Jeffs-MacBook-Air:build-rma jhammond$ clang++ -v
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.2.0
Thread model: posix

Error:

[ 60%] Building CXX object CMakeFiles/El.dir/src/lapack-like/condense/Bidiag.cpp.o
[ 60%] Building CXX object CMakeFiles/El.dir/src/lapack-like/condense/HermitianTridiag.cpp.o
[ 60%] Building CXX object CMakeFiles/El.dir/src/lapack-like/condense/Hessenberg.cpp.o
[ 60%] Building CXX object CMakeFiles/El.dir/src/lapack-like/decomp/HermitianEig.cpp.o
[ 61%] Building CXX object CMakeFiles/El.dir/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp.o
[ 61%] Building CXX object CMakeFiles/El.dir/src/lapack-like/decomp/HermitianTridiagEig.cpp.o
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:120:26: error: redefinition of default
      argument
  Int a, Int b, SortType sort=UNSORTED,
                         ^    ~~~~~~~~
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:256:26: note: previous definition is here
  Int a, Int b, SortType sort=UNSORTED,
                         ^    ~~~~~~~~
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:121:35: error: redefinition of default
      argument
  const HermitianEigCtrl<Base<F>> ctrl=HermitianEigCtrl<Base<F>>() )
                                  ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:257:35: note: previous definition is here
  const HermitianEigCtrl<Base<F>> ctrl=HermitianEigCtrl<Base<F>>() );
                                  ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:221:34: error: redefinition of default
      argument
  Base<F> a, Base<F> b, SortType sort=UNSORTED,
                                 ^    ~~~~~~~~
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:286:34: note: previous definition is here
  Base<F> a, Base<F> b, SortType sort=UNSORTED,
                                 ^    ~~~~~~~~
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:222:35: error: redefinition of default
      argument
  const HermitianEigCtrl<Base<F>> ctrl=HermitianEigCtrl<Base<F>>() )
                                  ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:287:35: note: previous definition is here
  const HermitianEigCtrl<Base<F>> ctrl=HermitianEigCtrl<Base<F>>() );
                                  ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:240:34: error: redefinition of default
      argument
  Base<F> a, Base<F> b, SortType sort=UNSORTED,
                                 ^    ~~~~~~~~
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:292:34: note: previous definition is here
  Base<F> a, Base<F> b, SortType sort=UNSORTED,
                                 ^    ~~~~~~~~
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:241:35: error: redefinition of default
      argument
  const HermitianEigCtrl<Base<F>> ctrl=HermitianEigCtrl<Base<F>>() )
                                  ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:293:35: note: previous definition is here
  const HermitianEigCtrl<Base<F>> ctrl=HermitianEigCtrl<Base<F>>() );
                                  ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:385:1: error: explicit instantiation of
      undefined function template 'HermitianGenDefiniteEig'
PROTO(float)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:336:17: note: expanded from macro 'PROTO'
  template void HermitianGenDefiniteEig \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:253:6: note: explicit instantiation refers here
void HermitianGenDefiniteEig
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:385:1: error: explicit instantiation of
      undefined function template 'HermitianGenDefiniteEig'
PROTO(float)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:360:17: note: expanded from macro 'PROTO'
  template void HermitianGenDefiniteEig \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:283:6: note: explicit instantiation refers here
void HermitianGenDefiniteEig
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:385:1: error: explicit instantiation of
      undefined function template 'HermitianGenDefiniteEig'
PROTO(float)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:366:17: note: expanded from macro 'PROTO'
  template void HermitianGenDefiniteEig \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:289:6: note: explicit instantiation refers here
void HermitianGenDefiniteEig
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:386:1: error: explicit instantiation of
      undefined function template 'HermitianGenDefiniteEig'
PROTO(double)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:336:17: note: expanded from macro 'PROTO'
  template void HermitianGenDefiniteEig \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:253:6: note: explicit instantiation refers here
void HermitianGenDefiniteEig
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:386:1: error: explicit instantiation of
      undefined function template 'HermitianGenDefiniteEig'
PROTO(double)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:360:17: note: expanded from macro 'PROTO'
  template void HermitianGenDefiniteEig \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:283:6: note: explicit instantiation refers here
void HermitianGenDefiniteEig
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:386:1: error: explicit instantiation of
      undefined function template 'HermitianGenDefiniteEig'
PROTO(double)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:366:17: note: expanded from macro 'PROTO'
  template void HermitianGenDefiniteEig \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:289:6: note: explicit instantiation refers here
void HermitianGenDefiniteEig
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:387:1: error: explicit instantiation of
      undefined function template 'HermitianGenDefiniteEig'
PROTO(Complex<float>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:336:17: note: expanded from macro 'PROTO'
  template void HermitianGenDefiniteEig \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:253:6: note: explicit instantiation refers here
void HermitianGenDefiniteEig
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:387:1: error: explicit instantiation of
      undefined function template 'HermitianGenDefiniteEig'
PROTO(Complex<float>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:360:17: note: expanded from macro 'PROTO'
  template void HermitianGenDefiniteEig \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:283:6: note: explicit instantiation refers here
void HermitianGenDefiniteEig
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:387:1: error: explicit instantiation of
      undefined function template 'HermitianGenDefiniteEig'
PROTO(Complex<float>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:366:17: note: expanded from macro 'PROTO'
  template void HermitianGenDefiniteEig \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:289:6: note: explicit instantiation refers here
void HermitianGenDefiniteEig
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:388:1: error: explicit instantiation of
      undefined function template 'HermitianGenDefiniteEig'
PROTO(Complex<double>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:336:17: note: expanded from macro 'PROTO'
  template void HermitianGenDefiniteEig \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:253:6: note: explicit instantiation refers here
void HermitianGenDefiniteEig
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:388:1: error: explicit instantiation of
      undefined function template 'HermitianGenDefiniteEig'
PROTO(Complex<double>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:360:17: note: expanded from macro 'PROTO'
  template void HermitianGenDefiniteEig \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:283:6: note: explicit instantiation refers here
void HermitianGenDefiniteEig
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:388:1: error: explicit instantiation of
      undefined function template 'HermitianGenDefiniteEig'
PROTO(Complex<double>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp:366:17: note: expanded from macro 'PROTO'
  template void HermitianGenDefiniteEig \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build-rma/include/El/lapack-like/decomp.hpp:289:6: note: explicit instantiation refers here
void HermitianGenDefiniteEig
     ^
18 errors generated.
make[2]: *** [CMakeFiles/El.dir/src/lapack-like/decomp/HermitianGenDefiniteEig.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
^Cmake[2]: *** [CMakeFiles/El.dir/src/lapack-like/decomp/HermitianTridiagEig.cpp.o] Interrupt: 2
make[1]: *** [CMakeFiles/El.dir/all] Interrupt: 2
make: *** [all] Interrupt: 2

Moving away from git submodules

It appears (thanks to @horrovac) that GitHub does not include submodules within its autogenerated zip and tarballs, and so users which download these will suffer through a long pointless and confusing failing build process. And it is apparently impossible to disable GitHub generating these download links. Furthermore, git submodules confuse users who did not read the instructions that Elemental should be recursively cloned (i.e., with git clone --recursive rather than just git clone).

For this reason, it might be worthwhile to switch to git subtrees. I'm not very familiar with them, but it would appear that this is the standard solution to the above issues. I consider this a high priority.

Remove several dynamic casts via double-dispatch?

It is worth investigating whether or not many of Elemental's dynamic casts can be entirely avoided through the usage of double-dispatch (e.g., for assigning one AbstractDistMatrix to another):
http://en.wikipedia.org/wiki/Double_dispatch

This might tie in with the current exodus of logic within "DistMatrix::operator=" into "Copy", and helper member functions for DistMatrix may need to be added to support bidirectional assignment in order to allow for double dispatch.

Warn if old versions of OpenMPI detected during configuration

It appears that several recent versions of Ubuntu contain old versions of OpenMPI which appear to have significant bugs which cause MPI_Comm_dup to fail.

[poulson-ASUS:17490] *** Process received signal *** [poulson-ASUS:17490] Signal: Segmentation fault (11) [poulson-ASUS:17490] Signal code: Address not mapped (1) [poulson-ASUS:17490] Failing at address: 0x7f8f00000001 [poulson-ASUS:17490] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0(+0x10340)[0x7f8fa100e340] [poulson-ASUS:17490] [ 1] /usr/lib/libmpi.so.1(ompi_group_increment_proc_count+0x1f)[0x7f8f9822b9af] [poulson-ASUS:17490] [ 2] /usr/lib/libmpi.so.1(ompi_comm_set_nb+0x11a)[0x7f8f9821df7a] [poulson-ASUS:17490] [ 3] /usr/lib/libmpi.so.1(ompi_comm_set+0x48)[0x7f8f9821e3c8] [poulson-ASUS:17490] [ 4] /usr/lib/libmpi.so.1(ompi_comm_dup_with_info+0x91)[0x7f8f9821e481] [poulson-ASUS:17490] [ 5] /usr/lib/libmpi.so.1(PMPI_Comm_dup+0x90)[0x7f8f98248640] [poulson-ASUS:17490] [ 6] /home/poulson/Install/lib/libEl.so(_ZN2El12DistMultiVecIgEC1ENS_3mpi4CommE+0x45)[0x7f8f9ab91995] [poulson-ASUS:17490] [ 7] /home/poulson/Install/lib/libEl.so(_ZN2El11reg_qsd_ldl28RegularizedSolveAfterPromoteIdEEiRKNS_16DistSparseMatrixIT_EERKNS_12DistMultiVecINS_10BaseHelperIS3_E4typeEEESD_RKNS_7DistMapERKNS_16DistSymmNodeInfoERKNS_13DistSymmFrontIS3_EERNS7_IS3_EESA_ib+0x1a1)[0x7f8f9ba762b1] [poulson-ASUS:17490] [ 8] /home/poulson/Install/lib/libEl.so(_ZN2El11reg_qsd_ldl16FGMRESSolveAfterIdEEiRKNS_16DistSparseMatrixIT_EERKNS_12DistMultiVecINS_10BaseHelperIS3_E4typeEEESD_RKNS_7DistMapERKNS_16DistSymmNodeInfoERKNS_13DistSymmFrontIS3_EERNS7_IS3_EESA_iSA_ib+0x510)[0x7f8f9ba76f80] [poulson-ASUS:17490] [ 9] /home/poulson/Install/lib/libEl.so(_ZN2El11reg_qsd_ldl10SolveAfterIdEEiRKNS_16DistSparseMatrixIT_EERKNS_12DistMultiVecINS_10BaseHelperIS3_E4typeEEESD_RKNS_7DistMapERKNS_16DistSymmNodeInfoERKNS_13DistSymmFrontIS3_EERNS7_IS3_EERKNS_10RegQSDCtrlISA_EE+0xbf)[0x7f8f9ba78caf] [poulson-ASUS:17490] [10] /home/poulson/Install/lib/libEl.so(_ZN2El2qp6affine8MehrotraIdEEvRKNS_16DistSparseMatrixIT_EES7_S7_RKNS_12DistMultiVecIS4_EESB_SB_RS9_SC_SC_SC_RKNS1_12MehrotraCtrlIS4_EE+0xb22)[0x7f8f9b8ffff2] [poulson-ASUS:17490] [11] /home/poulson/Install/lib/libEl.so(_ZN2El2ENIdEEvRKNS_16DistSparseMatrixIT_EERKNS_12DistMultiVecIS2_EES2_S2_RS7_RKNS_2qp6affine4CtrlIS2_EE+0x407)[0x7f8f9b8c2d57]

No ``make check``

It would be of use to add a test suite, possibly executed via make test, which users could run in order to verify their build/installation.

Building on Mira fails

When building on BG/Q (Mira), I see the following configure warnings:

CMake Warning (dev) at cmake/external_projects/ElMath/ParMETIS.cmake:81 (add_library):
  ADD_LIBRARY called with SHARED option but the target platform does not
  support dynamic linking.  Building a STATIC library instead.  This may lead
  to problems.
Call Stack (most recent call first):
  cmake/external_projects/ElMath.cmake:291 (include)
  CMakeLists.txt:332 (include)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at cmake/external_projects/ElMath/ParMETIS.cmake:82 (add_library):
  ADD_LIBRARY called with SHARED option but the target platform does not
  support dynamic linking.  Building a STATIC library instead.  This may lead
  to problems.
Call Stack (most recent call first):
  cmake/external_projects/ElMath.cmake:291 (include)
  CMakeLists.txt:332 (include)
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Including /gpfs/mira-fs0/projects/DynamicPro/justusc/install/elemental/include for external ParMETIS
-- Appending /home/justusc/src/elemental/external/pmrrr/include for PMRRR's headers
CMake Warning (dev) at external/pmrrr/CMakeLists.txt:77 (add_library):
  ADD_LIBRARY called with SHARED option but the target platform does not
  support dynamic linking.  Building a STATIC library instead.  This may lead
  to problems.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at CMakeLists.txt:404 (add_library):
  ADD_LIBRARY called with SHARED option but the target platform does not
  support dynamic linking.  Building a STATIC library instead.  This may lead
  to problems.
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Configuring done
-- Generating done
-- Build files have been written to: /home/justusc/build/elemental

and build errors:

Scanning dependencies of target sandbox-test
[100%] Building CXX object CMakeFiles/sandbox-test.dir/sandbox/test.cpp.o
Linking CXX executable bin/sandbox-test
/soft/compilers/bgclang/r238097-20150523/binutils/bin/ld: attempted static link of dynamic object `/gpfs/mira-fs0/projects/DynamicPro/justusc/install/elemental/lib/libparmetis.so'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [bin/sandbox-test] Error 1
make[1]: *** [CMakeFiles/sandbox-test.dir/all] Error 2
make: *** [all] Error 2

It appears that ParMETIS is being built as a static library, despite the fact that configure warnings says otherwise. The pmrrr library does appear to be a static library, though the warning is a little annoying.

CMake Error due to missing CMakeLists.txt in kiss_fft and metis

This is not really a problem but it is obnoxious that CMake presents to the user an output that my suggest otherwise.

CMake Error at CMakeLists.txt:64 (add_subdirectory):
  The source directory

    /global/project/projectdirs/m1907/Elemental/external/kiss_fft

  does not contain a CMakeLists.txt file.


CMake Error at CMakeLists.txt:110 (add_subdirectory):
  The source directory

    /global/project/projectdirs/m1907/Elemental/external/metis

  does not contain a CMakeLists.txt file.

factorize MPI and other external interfaces into separate project

This feature was discussed on the email list. I am adding it as an issue to avoid losing it.

Jack:

As for the length of core/imports/mpi.cpp: I agree that the file is
quite large. I think that it would be a great idea if
core/imports/{blas,lapack,mpi} were their own project, which Elemental
simply included, as I would expect them to see wider use and more
contributions. Keeping all three together would be a good idea for
issues like large integer support, as Elemental will not really be able
to effectively use 64-bit MPI buffers without 64-bit integers for
BLAS/LAPACK, and vice versa.

What do you think about moving core/imports/{blas,lapack,mpi} into an
external project and including them as git submodules in Elemental?

Jeff:

If {blas,lapack,mpi} wrappers are split off, it will be key to have API versioning 
so El can query to see if they match up.

I would be inclined to add BLIS, Eigen and LAPACK C support (aren't there 
two variants of this?) as part of this refactoring, if only so I could avoid 
Fortran 77 altogether.

The first step in this project will be to create new repos in the Elemental team space.

Reenabling Windows support

The current obstacle to compiling Elemental on Windows platforms is the lack of pthreads support (which is currently required for the distributed symmetric tridiagonal eigensolver, PMRRR). However, @tkelman has informed me that winpthreads (http://mingw-w64.sourceforge.net/) is liberally licensed and can be used as a replacement. It should ideally be possible to package winpthreads with PMRRR in order to support Windows.

Properly passing MATH_LIBS into ScaLAPACK CMake

It seems that there are cases where ScaLAPACK is attempting to link to OpenBLAS via -llibopenblas rather than something more sensible, such as -lopenblas or -L/path/to/openblas -lopenblas.

This is likely due to the stringification of the ExternalProject_Add target name libopenblas being interpreted as a library instead when passed into ScaLAPACK. It is likely necessary to extract and pass the library name itself instead.

Sparse-direct Tikhonov and ridge regression need to be updated

The routines for sparse-direct least squares (and minimum length) regression make use of quasi-semidefinite factorizations in order to avoid directly forming either A' A or A A', but the Tikhonov and ridge-regression routines have not yet been updated to do the same.

Setting the destination of Python files

By default, on OSX it seems the Python files try to go to a system folder. What should I specify to install them in a user folder? The use case here is the Homebrew formula.

Thanks!

Compile error with VS2013

4>f:\gitsources\elemental\include\El/core/types.hpp(235): error C2146: syntax error : missing ';' before identifier 'Dist'

Installation issues on Stampede

It appears that there are subtle issues with Elemental's installation on TACC's Stampede; for example, the intel toolchain file does not properly configure due to the MATH_LIBS functions having unresolved MPI dependencies.

One distributed matrix class to rule them all

It would seem to be a good idea to merge DistMatrix<T,ColDist=MC,RowDist=MR>, BlockDistMatrix<T,ColDist=MC,RowDist=MR>, and DistMultiVec<T> into a single DistMatrix<T,ColDist=MC,RowDist=MR,Wrap=CYCLIC>, where the current DistMatrix corresponds to Wrap=CYCLIC, BlockDistMatrix would correspond to Wrap=BLOCK_CYCLIC, and DistMultiVec would correspond to Wrap=BLOCK. This should be planned for after the 0.86 release.

Tag/branch name

Can you change the name of the 0.84 branch or 0.84 tag? One possibility would be to prepend v to the tag name (e.g. v0.84). The problem is that Git cannot differentiate between the two with:

$ git checkout 0.84

and always assumes the tag instead of the branch.

Creating Mac OS X packages

While Elemental now has preliminary support for CPack, it seems that CPack still assumes the existence of PackageMaker which has moved beyond deprecation and is now non-functional on recent versions of Mac OS X. So the choices seem to be:

  1. Wait for CPack to add support for productbuild
  2. Manually add support for productbuild (I do not like this option), or
  3. Hook into another system entirely, such as hashdist or anaconda.

Add CMake config file

It would be helpful to add a CMake config file, so that other projects can use the CMake find_package command to find and configure Elemental. Implementing the file is very simple.

Add an elemental-config.cmake.in file, for example:

# - CMAKE Config file for the Elemental package
# The following variables are defined:
#  Elemental_INCLUDE_DIRS         - A list of Elemental include dirctories and
#                                   dependencies required to compile with Elemental
#  Elemental_LIBRARIES            - A list of Elemental libraries and dependencies
#                                   required to link with Elemental
#  Elemental_COMPILE_FLAGS        - Compile flags required to compile with Elemental
#  Elemental_LINKER_FLAGS         - Linker flags required to link with Elemental
#  Elemental_VERSION              - Elemental version number

# Compute paths
get_filename_component(Elemental_CONFIG_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(Elemental_ROOT_DIR "${Elemental_CONFIG_DIR}/../../.." ABSOLUTE)
set(Elemental_INCLUDE_DIRS ${Elemental_ROOT_DIR}/include)

# Set package version
set(Elemental_VERSION "@ELEMENTAL_VERSION@")

# Set compile and link flags
set(Elemental_COMPILE_FLAGS "@CMAKE_CXX_FLAGS@")
set(Elemental_LINKER_FLAGS "@MPI_LINK_FLAGS@")
list(APPEND Elemental_INCLUDE_DIRS @Elemental_CONFIG_INCLUDE_DIRS@)
set(Elemental_LIBRARIES @Elemental_CONFIG_LIBRARIES@)

Then add the following lines to your main CMakeLists.txt file:

# Generate config file
CONFIGURE_FILE(
  ${PROJECT_SOURCE_DIR}/cmake/elemental-config.cmake.in
  ${PROJECT_BINARY_DIR}/cmake/elemental-config.cmake
  @ONLY)

# install config files
install(FILES ${PROJECT_BINARY_DIR}/cmake/elemental-config.cmake
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/CMake/Elemental)

Parmetis link failure

It seems like after moving parmetis to a cmake project, the build for Elemental.jl stopped working (at least on OSX). I'll investigate later what is going on but maybe the default build needs to be tweaked. Any insight appreciated.

Linking C shared library libparmetis.dylib
Undefined symbols for architecture x86_64:
  "_MPI_Allgather", referenced from:
      _libparmetis__gkMPI_Allgather in gkmpi.c.o
  "_MPI_Allgatherv", referenced from:
      _libparmetis__gkMPI_Allgatherv in gkmpi.c.o
  "_MPI_Allreduce", referenced from:
      _libparmetis__gkMPI_Allreduce in gkmpi.c.o
  "_MPI_Alltoall", referenced from:
      _libparmetis__gkMPI_Alltoall in gkmpi.c.o
  "_MPI_Alltoallv", referenced from:
      _libparmetis__gkMPI_Alltoallv in gkmpi.c.o
  "_MPI_Barrier", referenced from:
      _libparmetis__gkMPI_Barrier in gkmpi.c.o
  "_MPI_Bcast", referenced from:
      _libparmetis__gkMPI_Bcast in gkmpi.c.o
  "_MPI_Comm_dup", referenced from:
      _libparmetis__SetupCtrl in ctrl.c.o
  "_MPI_Comm_free", referenced from:
      _libparmetis__gkMPI_Comm_free in gkmpi.c.o
  "_MPI_Comm_rank", referenced from:
      _libparmetis__gkMPI_Comm_rank in gkmpi.c.o
  "_MPI_Comm_size", referenced from:
      _libparmetis__gkMPI_Comm_size in gkmpi.c.o
  "_MPI_Comm_split", referenced from:
      _libparmetis__gkMPI_Comm_split in gkmpi.c.o
  "_MPI_Finalize", referenced from:
      _libparmetis__gkMPI_Finalize in gkmpi.c.o
  "_MPI_Gatherv", referenced from:
      _libparmetis__gkMPI_Gatherv in gkmpi.c.o
  "_MPI_Get_count", referenced from:
      _libparmetis__gkMPI_Get_count in gkmpi.c.o
  "_MPI_Irecv", referenced from:
      _libparmetis__gkMPI_Irecv in gkmpi.c.o
  "_MPI_Isend", referenced from:
      _libparmetis__gkMPI_Isend in gkmpi.c.o
  "_MPI_Recv", referenced from:
      _libparmetis__gkMPI_Recv in gkmpi.c.o
  "_MPI_Reduce", referenced from:
      _libparmetis__gkMPI_Reduce in gkmpi.c.o
  "_MPI_Scan", referenced from:
      _libparmetis__gkMPI_Scan in gkmpi.c.o
  "_MPI_Scatterv", referenced from:
      _libparmetis__gkMPI_Scatterv in gkmpi.c.o
  "_MPI_Send", referenced from:
      _libparmetis__gkMPI_Send in gkmpi.c.o
  "_MPI_Wait", referenced from:
      _libparmetis__gkMPI_Wait in gkmpi.c.o
  "_MPI_Waitall", referenced from:
      _libparmetis__gkMPI_Waitall in gkmpi.c.o
  "_MPI_Wtime", referenced from:
      _libparmetis__KWayAdaptiveRefine in akwayfm.c.o
      _ParMETIS_V3_AdaptiveRepart in ametis.c.o
      _libparmetis__CommSetup in comm.c.o
      _ParMETIS_V3_PartGeomKway in gkmetis.c.o
      _ParMETIS_V3_PartGeom in gkmetis.c.o
      _libparmetis__Balance_Partition in initbalance.c.o
      _libparmetis__InitMultisection in initmsection.c.o
      ...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[5]: *** [libparmetis/libparmetis.dylib] Error 1
make[4]: *** [libparmetis/CMakeFiles/parmetis.dir/all] Error 2
make[3]: *** [all] Error 2
make[2]: *** [download/parmetis/build/stamp/project_parmetis-build] Error 2
make[1]: *** [CMakeFiles/project_parmetis.dir/all] Error 2
make: *** [all] Error 2

src/lapack-like/props/Determinant.cpp:133:35: error: redefinition of default argument F Determinant( Matrix<F>& A, bool canOverwrite=false )

I can probably fix these on my own from now on.

/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:133:35: error: redefinition of default argument
F Determinant( Matrix<F>& A, bool canOverwrite=false )
                                  ^            ~~~~~
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:153:35: note: previous definition is here
F Determinant( Matrix<F>& A, bool canOverwrite=false );
                                  ^            ~~~~~
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:141:39: error: redefinition of default argument
F Determinant( DistMatrix<F>& A, bool canOverwrite=false )
                                      ^            ~~~~~
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:155:39: note: previous definition is here
F Determinant( DistMatrix<F>& A, bool canOverwrite=false );
                                      ^            ~~~~~
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:150:41: error: redefinition of default argument
( UpperOrLower uplo, Matrix<F>& A, bool canOverwrite=false )
                                        ^            ~~~~~
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:163:41: note: previous definition is here
( UpperOrLower uplo, Matrix<F>& A, bool canOverwrite=false );
                                        ^            ~~~~~
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:159:45: error: redefinition of default argument
( UpperOrLower uplo, DistMatrix<F>& A, bool canOverwrite=false )
                                            ^            ~~~~~
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:166:45: note: previous definition is here
( UpperOrLower uplo, DistMatrix<F>& A, bool canOverwrite=false );
                                            ^            ~~~~~
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:216:1: error: explicit instantiation of undefined
      function template 'Determinant'
PROTO(float)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:185:14: note: expanded from macro 'PROTO'
  template F Determinant( Matrix<F>& A, bool canOverwrite ); \
             ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:153:3: note: explicit instantiation refers here
F Determinant( Matrix<F>& A, bool canOverwrite=false );
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:216:1: error: explicit instantiation of undefined
      function template 'Determinant'
PROTO(float)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:186:14: note: expanded from macro 'PROTO'
  template F Determinant( DistMatrix<F>& A, bool canOverwrite ); \
             ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:155:3: note: explicit instantiation refers here
F Determinant( DistMatrix<F>& A, bool canOverwrite=false );
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:216:1: error: explicit instantiation of undefined
      function template 'HPDDeterminant'
PROTO(float)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:192:20: note: expanded from macro 'PROTO'
  template Base<F> HPDDeterminant \
                   ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:162:9: note: explicit instantiation refers here
Base<F> HPDDeterminant
        ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:216:1: error: explicit instantiation of undefined
      function template 'HPDDeterminant'
PROTO(float)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:194:20: note: expanded from macro 'PROTO'
  template Base<F> HPDDeterminant \
                   ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:165:9: note: explicit instantiation refers here
Base<F> HPDDeterminant
        ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:217:1: error: explicit instantiation of undefined
      function template 'Determinant'
PROTO(double)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:185:14: note: expanded from macro 'PROTO'
  template F Determinant( Matrix<F>& A, bool canOverwrite ); \
             ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:153:3: note: explicit instantiation refers here
F Determinant( Matrix<F>& A, bool canOverwrite=false );
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:217:1: error: explicit instantiation of undefined
      function template 'Determinant'
PROTO(double)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:186:14: note: expanded from macro 'PROTO'
  template F Determinant( DistMatrix<F>& A, bool canOverwrite ); \
             ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:155:3: note: explicit instantiation refers here
F Determinant( DistMatrix<F>& A, bool canOverwrite=false );
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:217:1: error: explicit instantiation of undefined
      function template 'HPDDeterminant'
PROTO(double)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:192:20: note: expanded from macro 'PROTO'
  template Base<F> HPDDeterminant \
                   ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:162:9: note: explicit instantiation refers here
Base<F> HPDDeterminant
        ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:217:1: error: explicit instantiation of undefined
      function template 'HPDDeterminant'
PROTO(double)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:194:20: note: expanded from macro 'PROTO'
  template Base<F> HPDDeterminant \
                   ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:165:9: note: explicit instantiation refers here
Base<F> HPDDeterminant
        ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:218:1: error: explicit instantiation of undefined
      function template 'Determinant'
PROTO(Complex<float>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:185:14: note: expanded from macro 'PROTO'
  template F Determinant( Matrix<F>& A, bool canOverwrite ); \
             ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:153:3: note: explicit instantiation refers here
F Determinant( Matrix<F>& A, bool canOverwrite=false );
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:218:1: error: explicit instantiation of undefined
      function template 'Determinant'
PROTO(Complex<float>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:186:14: note: expanded from macro 'PROTO'
  template F Determinant( DistMatrix<F>& A, bool canOverwrite ); \
             ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:155:3: note: explicit instantiation refers here
F Determinant( DistMatrix<F>& A, bool canOverwrite=false );
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:218:1: error: explicit instantiation of undefined
      function template 'HPDDeterminant'
PROTO(Complex<float>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:192:20: note: expanded from macro 'PROTO'
  template Base<F> HPDDeterminant \
                   ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:162:9: note: explicit instantiation refers here
Base<F> HPDDeterminant
        ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:218:1: error: explicit instantiation of undefined
      function template 'HPDDeterminant'
PROTO(Complex<float>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:194:20: note: expanded from macro 'PROTO'
  template Base<F> HPDDeterminant \
                   ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:165:9: note: explicit instantiation refers here
Base<F> HPDDeterminant
        ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:219:1: error: explicit instantiation of undefined
      function template 'Determinant'
PROTO(Complex<double>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:185:14: note: expanded from macro 'PROTO'
  template F Determinant( Matrix<F>& A, bool canOverwrite ); \
             ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:153:3: note: explicit instantiation refers here
F Determinant( Matrix<F>& A, bool canOverwrite=false );
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:219:1: error: explicit instantiation of undefined
      function template 'Determinant'
PROTO(Complex<double>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:186:14: note: expanded from macro 'PROTO'
  template F Determinant( DistMatrix<F>& A, bool canOverwrite ); \
             ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:155:3: note: explicit instantiation refers here
F Determinant( DistMatrix<F>& A, bool canOverwrite=false );
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:219:1: error: explicit instantiation of undefined
      function template 'HPDDeterminant'
PROTO(Complex<double>)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/props/Determinant.cpp:192:20: note: expanded from macro 'PROTO'
  template Base<F> HPDDeterminant \
                   ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/props.hpp:162:9: note: explicit instantiation refers here
Base<F> HPDDeterminant
        ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make[2]: *** [CMakeFiles/El.dir/src/lapack-like/props/Determinant.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/El.dir/all] Error 2
make: *** [all] Error 2

More general sparse matrix distributions

As of now, DistSparseMatrix and DistMultiVec only support simple fixed 1D distributions. Two improvements should be added:

  1. Support for 2D sparse matrix distributions
  2. Support for user-defined per-process blocksizes (or, more generally, user-defined distributions)

ElVars file does not have the libraries in the expected format

My auto generated ElVars file contains the following in ALL_MATH_LIBS field:

ALL_MATH_LIBS = -lEl -lpmrrr  \
                 /usr/local/El/lib/libopenblas.so gfortran pthread m /usr/lib/gcc/x86_64-linux-gnu/4.8/libquadmath.so  \
                 /usr/local/El/lib/libparmetis.so /usr/local/El/lib/libmetis.so

As you can see gfortran pthread m are written instead of -lgfortran -lpthread -lm. I tried to fix it by myself but without success.

Platform used:

  • Linux Mint 17.1 (Ubuntu 14.04)
  • gcc 4.8.2
  • cmake 2.8.12.2

CMake ExternalProject for ScaLAPACK

While ScaLAPACK can optionally be used for a few purposes in Elemental (with a full interface being a useful goal), there is not yet an automatic way of downloading/building/installing ScaLAPACK, despite the fact that ScaLAPACK has a CMakeLists.txt

src/lapack-like/perm/ApplyColPivots.cpp:95:71: error: redefinition of default argument ( DistMatrix<T,U,V>& A, const DistMatrix<Int,UPerm,STAR>& pivots, Int offset=0 )

This is pretty much the same as issue #3...

/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:95:71: error: redefinition of default argument
( DistMatrix<T,U,V>& A, const DistMatrix<Int,UPerm,STAR>& pivots, Int offset=0 )
                                                                      ^      ~
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:77:7: note: previous definition is here
  Int offset=0 );
      ^      ~
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:145:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,CIRC,CIRC) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:126:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:145:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,CIRC,CIRC) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:128:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:145:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,CIRC,CIRC) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:130:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:145:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,CIRC,CIRC) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:132:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:145:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,CIRC,CIRC) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:134:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:145:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,CIRC,CIRC) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:136:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:146:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,MC,  MR  ) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:126:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:146:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,MC,  MR  ) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:128:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:146:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,MC,  MR  ) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:130:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:146:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,MC,  MR  ) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:132:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:146:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,MC,  MR  ) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:134:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:146:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,MC,  MR  ) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:136:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:147:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,MC,  STAR) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:126:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:147:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,MC,  STAR) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:128:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:147:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,MC,  STAR) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:130:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:147:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,MC,  STAR) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:132:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:147:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,MC,  STAR) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:134:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:160:1: error: explicit instantiation of undefined
      function template 'ApplyInverseColPivots'
PROTO(Int)
^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:147:3: note: expanded from macro 'PROTO'
  PROTO_DIST(T,MC,  STAR) \
  ^
/Users/jhammond/Work/ELEMENTAL/git/src/lapack-like/perm/ApplyColPivots.cpp:136:17: note: expanded from macro 'PROTO_DIST'
  template void ApplyInverseColPivots \
                ^
/Users/jhammond/Work/ELEMENTAL/git/build/include/El/./lapack-like/perm.hpp:75:6: note: explicit instantiation refers here
void ApplyInverseColPivots
     ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make[2]: *** [CMakeFiles/El.dir/src/lapack-like/perm/ApplyColPivots.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/El.dir/all] Error 2
make: *** [all] Error 2

How to get LU form of a DistMatrix ?

I try to print the matrix after Gaussian Elimination (source code in examples directory) but It does not give me the L or U form.

Could you give some instructions on how to obtain the row echelon form out of a matrix?

Thanks

No metis

You did not include metis in the Elemental 0.86, Release Candidate 1 Zip/Tar archive, cmake fails with no useful error message. All tests pass and then it reports failure to configure. That cost me a day of troubleshooting.

Blis submodule update fails

Checkout of the Blis submodule fails with a clean checkout of Elemental. I saw the same problem on both the master and 0.84 branches. I think the issue is that the Blis submodule is referencing a non-public commit of Blis.

The output is given below.

$ git clone https://github.com/elemental/Elemental.git elemental
Cloning into 'elemental'...
remote: Counting objects: 44049, done.
remote: Compressing objects: 100% (169/169), done.
remote: Total 44049 (delta 114), reused 1 (delta 1)
Receiving objects: 100% (44049/44049), 34.85 MiB | 3.39 MiB/s, done.
Resolving deltas: 100% (25797/25797), done.
Checking connectivity... done.

$ cd elemental/
$ ls
AUTHORS          PUBLICATIONS.bib TODO             experimental     octave           tests
CMakeLists.txt   README.md        cmake            external         sandbox          vagrant
LICENSE          REFERENCES.bib   examples         include          src

$ git submodule init
Submodule 'external/OpenBLAS' (https://github.com/xianyi/OpenBLAS.git) registered for path 'external/OpenBLAS'
Submodule 'external/blis' (https://code.google.com/p/blis.git) registered for path 'external/blis'

$ git submodule update
Cloning into 'external/OpenBLAS'...
remote: Counting objects: 14155, done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 14155 (delta 8), reused 1 (delta 0)
Receiving objects: 100% (14155/14155), 13.80 MiB | 3.21 MiB/s, done.
Resolving deltas: 100% (9539/9539), done.
Checking connectivity... done.
Submodule path 'external/OpenBLAS': checked out '793509a3b559a5e2b243fa93e18bc63822b9e58c'
Cloning into 'external/blis'...
remote: Counting objects: 10316, done.
Receiving objects: 100% (10316/10316), 2.77 MiB | 1.26 MiB/s, done.
Resolving deltas: 100% (8652/8652), done.
Checking connectivity... done.
fatal: reference is not a tree: 8c5d6071e24ba10a53669390a47287e86ff354ce
Unable to checkout '8c5d6071e24ba10a53669390a47287e86ff354ce' in submodule path 'external/blis' 

Automatically installing MPICH

It would seem that a number of users would find it convenient for Elemental to automatically download and install MPICH if no pre-installed version of MPI was detected during configuration.

I've done a bit of legwork to help move towards this capability:
ae457c5
but CMake's ExternalProject_Add causes external dependencies to be built during the "make", as opposed to "configure" phase, and the MPI link and compilation flags must be known at configuration time. Thus, we must have some way of specifying these parameters a priori, which is troubling. Perhaps it's worth looking into how PETSc handles this dependency, as I'm under the impression that PETSc will download and install MPICH by default. @jedbrown

Read and Compute using Sparse Matrix

I'm trying to read this matrix (and other larger) http://www.cise.ufl.edu/research/sparse/MM/GHS_psdef/cvxbqp1.tar.gz

It's not so large, but the read method will just give me bad_alloc. Is there any workaround this ?

DistMatrix<float> A;                             
Read(A, filename, MATRIX_MARKET); 

I have ~ 36GB of RAM... 50000 199984 is the size and nnz of the matrix .. so It shouldn't be using all of my RAM.

Add shortcuts into Transpose which exploit square process grids

A number of routines in Elemental have two versions: one for square grids and one for general grids. In many cases (e.g., for dense Cholesky factorization), there would only need to be one implementation if Transpose was extended to automatically perform the shortcut.

Allow support for 64-bit BLAS ints

This capability is apparently occasionally needed for interfacing with Julia and is not supported by Elemental's existing EL_USE_64BIT_INTS (which instead has to do with the indexing type of sequential and distributed matrices).

Redesign CMAKE_BUILD_TYPE

  1. CMAKE_BUILD_TYPE is overridden from its default CMake meaning but the help text is not changed. The default values like RelWithDebInfo are no longer valid.
  2. Changing CMAKE_BUILD_TYPE does not automatically refresh C_FLAGS, CXX_FLAGS and Fortran_FLAGS, even if the flags fields are cleared.
  3. Is there any reason why Pure (MPI only) vs Hybrid (MPI+OpenMP) cannot be handled in a different variable like USE_OPENMP? The CMAKE_BUILD_TYPEs are really meant to just distinguish between release and debug builds.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.