Open lruthotto opened 10 years ago
Given that your MUMPS package does not follow the conventions for binary dependencies and, in my experience, is not installable even on platforms like Ubuntu where you claim it can be installed, I think it is a bit of a stretch to expect it to be included in JuliaBox. May I suggest instead that you create a version of MUMPS.jl that follows the conventions of a deps directory with the expected subdirectories and use of BinDeps.jl and, if you want it to use MPI, somehow coordinates with MPI.jl?
I know that the installation of our MUMPS wrapper is not satisfactory. At some point I tried to make it work using BinDeps.jl, but got stuck on it and gave up.
I noticed that the documentation of BinDeps has advanced since then. I will try to take a look at it, but I cannot promise anything (it's not really my area of expertise). I would also appreciate any help or clues how to realize an easier installation.
What is the challenge on Ubuntu? Can't we use this?
@lruthotto On rereading what I wrote, I realize I could have phrased things in a more constructive way. Making some combination of MUMPS, Metis, MPI, Scotch, etc. available in Julia is quite desirable. However, doing this in a robust way using BinDeps tools is difficult. Metis does use cmake for configuration but tracking down license conditions and source code repositories for that code is confusing. MUMPS and Scotch are even worse because they don't use any configuration system. Combining all of this with MPI makes things even more challenging because MPI wants to be invoked externally to the program, meaning Julia in this case. May I suggest that we move the issue to, say, the MUMPS.jl repository or even the Metis.jl repository, and bring in others like @tkelman and @ViralBShah who have considerable experience in configuring such software. I just saw Viral's comment so I will submit this comment then respond to him.
@dmbates METIS was recently relicensed under Apache 2.0, but unfortunately ParMETIS is still under a restrictive license. I know because about a month ago I merged METIS into Elemental's CMake configuration.
@ViralBShah In the current MUMPS.jl package the libraries (mumps, metics, blacs, etc.) are to be compiled from sources. It is not easy because the configuration instructions for mumps are "casual". If BinDeps was used for configuration it would help but look at all the dependencies required for the Ubuntu mumps package. It's a "twisted maze of passages".
@poulson Is there a repository from which the sources can be downloaded? Right now in the Metis.jl package I use
URI("http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz")
Is there anything more formal than that?
@dmbates As far as I'm aware, due to the LICENSE only having recently changed, a large number of groups have been quietly maintaining semi-public repositories, but there is no standard other than the METIS website. I have a github repository with a trivial change to the CMakeLists.txt to help support METIS as a subproject here: https://github.com/poulson/metis
@ViralBShah Perhaps I should explain further. Because the word "packages" is overloaded and can mean a source code package like Metis, MUMPS, Scotch, etc. or a Julia package I will write Julia package explicitly. That is, "package" without the qualifier means "source package".
The coupling between packages like MUMPS, Metis, Scotch, LAPACK/BLAS, Blacs, etc. can make things complicated even for the serial versions. In applications it may be important to use parallel implementations where the linkages get much more complicated.
We have a Metis Julia package that uses BinDeps. It would be good to avoid building Metis for other Julia packages like MUMPS but doing so would involve a mechanism for, say, a MUMPS Julia package linking to a library in a Metis Julia package. Doing this in a portable way could get complicated.
I suggest that we create an issue in whatever Julia package repository seems appropriate and discuss how we want to design the connections between Julia packages that create fill-reducing permutations and Julia packages that evaluate and use sparse matrix decompositions. In both cases we would want to allow for serial and parallel versions.
Given that with JuliaBox, it should be easy for all of us to get resources to test parallel codes easily, rather soon - perhaps making MUMPS with MPI and all the other stuff in Julia is an idea whose time has come.
Cc: @amitmurthy
If we make progress, @poulson 's Elemental is also a great target for dense linear algebra.
I think it would be great to have MUMPS available in Julia. I'm afraid I cannot help too much with sorting out all dependency issues, but I will be more than happy to help testing it.
@poulson I can't tell you how thrilling it is to me to see that Elemental is a numerical linear algebra system which uses a github repository and also uses cmake for configuration.
@dmbates Thanks! In case it helps, as of yesterday, Elemental supports both symmetric and least squares sparse-direct methods, with the caveats that pivoting in the symmetric factorizations are (currently) limited to within supernodes and the least-squares solver is explicitly forming A' A and running Cholesky due to this tending to be reasonable for many first-order optimization methods (e.g., ADMM). I'm going to simplify the interface to the least-squares capability in the next few hours.
@poulson unfortunately Mumps 4.x requires Metis 4.x, which has a lousy license and build system. Until Mumps 5.x gets released, I don't think it's worth trying to combine the two for Julia purposes anyway.
OK, I didn't know that. Probably better to wait for an elegant solution then.
In the meantime I installed MUMPS on my account in the juliabox. It was actually much easier than expected (thanks for putting together such a nice system). Here is a small how-to for people who want to try.
1) Use the console to:
git clone https://github.com/lruthotto/MUMPS.jl.git
2) cd to /home/juser/MUMPS.jl/src and modify line 11 of Makefile to:
LIBBLAS = /usr/lib/libblas/libblas.so.3
3) cross fingers and try
make
4) Then edit MUMPSfuncs.jl and replace globally '../lib/MUMPS' by '/home/juser/MUMPS.jl/lib/MUMPS'
5) run some tests
cd /home/juser/MUMPS.jl/tests
julia
push!(LOAD_PATH,"/home/juser/")
using MUMPS
include("testDivGrad.jl")
6) Have fun!
Great. For now, I hope this works for you, and we should find a solution soon enough.
@tkelman MUMPS 5 is out.
Hey there,
I am becoming a big fan of juliabox! Great job everyone! I am just missing the package MUMPS.jl or a similar support of MUMPS (https://github.com/lruthotto/MUMPS.jl). Do you think you can add it?
A note on the installation: Please look at the issue (https://github.com/lruthotto/MUMPS.jl/issues/2) that discusses problems with installing MUMPS using homebrew (probably due to some conflicting BLAS libraries). Because of that, in our research groups, we compile MUMPS into a static library using the Makefile provided.
I'm really looking forward to testing more on the box!