JuliaCloud / JuliaBox

Juliabox continues to run, but this codebase is no longer current.
http://www.juliabox.org/
Other
185 stars 50 forks source link

MUMPS.jl #131

Open lruthotto opened 10 years ago

lruthotto commented 10 years ago

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!

dmbates commented 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?

lruthotto commented 10 years ago

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.

ViralBShah commented 10 years ago

What is the challenge on Ubuntu? Can't we use this?

http://packages.ubuntu.com/source/lucid/mumps

dmbates commented 10 years ago

@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.

poulson commented 10 years ago

@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.

dmbates commented 10 years ago

@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".

dmbates commented 10 years ago

@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?

poulson commented 10 years ago

@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

dmbates commented 10 years ago

@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.

ViralBShah commented 10 years ago

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

ViralBShah commented 10 years ago

If we make progress, @poulson 's Elemental is also a great target for dense linear algebra.

lruthotto commented 10 years ago

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.

dmbates commented 10 years ago

@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.

poulson commented 10 years ago

@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.

tkelman commented 10 years ago

@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.

lruthotto commented 10 years ago

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!

ViralBShah commented 10 years ago

Great. For now, I hope this works for you, and we should find a solution soon enough.

PallHaraldsson commented 8 years ago

@tkelman MUMPS 5 is out.