I'd like to solve the following steps:
fill a boost::numeric::ublas::compressed_matrix;
now, I'd need to apply Cholesky factorization.
However, there is no such boost's function.
So I started looking for another library - I was thinking about BLAS or a kind LAPACK libs. But, although there are algorithms I'd need, how to bind boost::numeric::ublas::compressed_matrix with a BLAS or LAPACK's function/algorithm? Is there such a way?
Finally, I'd need to solve 'Ax=b', where 'A' is boost's compressed_matrix factorized by Cholesky algorithm. So how to solve 'x' with use of boost's and/or LAPACK's algorithm(s) or function(s)?
Thanks in advance.
LuP
Related
I'm looking for the most efficient way to compute out-of-place transposition for large matrices (>> 1024x1024), in C/C++. I've already came across several answers in SO, however I need more "trustworthy" sources for my work (like blas/lapack).
From an online quick search I understood blas has no such function. But it was implied that Lapack implemented matrix transposition. I've been looking for awhile (including the lapack documentation) but found no answer.
I know MKL-Blas implements matrix transposition, but I'm working in a remote server and I'm not able to install it there.
OpenBLAS (a BLAS implementation) supports those:
https://github.com/xianyi/OpenBLAS/wiki/OpenBLAS-Extensions
?omatcopy s,d,c,z out-of-place transpositon/copying
I am dealing with up to N=10^7 x N=10^7 matrices; number of nonzero elements is about 6 x N. (Those elements are grouped around diagonal.) My RAM has 16 Gbt size; so I clearly need sparse matrix solver. I run Ubuntu LINUX, and use fortran90 (gfortran), or precisely speaking, ratfor90.
I have LAPACK, but it doesn't seem to support sparse matrix solving.
(am I wrong with that?) MATLAB must be good, but I don't want to spend much time to get familiar with it; the time is pressing. I have old/gold slatec installed and use it for spec. functions; does it have sparse matrix routins?
I hear about ARPACK, but can it be used as a plain solver? could it be called from gfortran?
Any other suggestion?
Thanks, -- Alex
You are right. Lapack is not applicable to this problem.
Direct Sparse solvers are provided by MUMPS, UMFPACK, SuperLU libraries.
Also PETSc is a library collection where you can find a lot of information
You can find Ubuntu package available for all these libraries.
ARPACK is a package that solves eigenvalue problems, but it is not a solver by itself.
I am not sure you can solve your problem on 16 Gb. I recommend having a look at freefem++
I'm looking for any standard C program that uses OpenMP APIs for a sparse matrix-vector or matrix-matrix multiplications. Can anyone let me know if there are any such programs.
If you are not looking for an open-source library, you can try to have a look at the Intel MKL Sparse-BLAS level 2 and level 3 routines:
http://software.intel.com/sites/products/documentation/hpc/mkl/updates/10.3.5/mklman/index.htm
These libraries should be multithreaded using OpenMP, as stated in the following page:
http://software.intel.com/en-us/articles/intel-math-kernel-library-intel-mkl-using-intel-mkl-with-threaded-applications/
I don't understand why you are looking for a 3rd party library to perform sparse matrix-matrix multiplications.
Have a look at this great Book (Introduction to Parallel Computing): http://www.scribd.com/doc/60118054/72/The-matrix%E2%80%93vector-multiplication-with-OpenMP
These days I am starting learning BOOST UBLAS and BOOST MATH for my tasks.
I was bit surprised to find that there is no eigenvalue/vector solver in it.
Since I would like to stick with Boost libs and their matrix classes, do you know about any library built on top of boost ublas capables to find eigenvalues and other stuff that might extend it or that are capable (at least) to accept boost matrix as input?
Boost ublas does not implement the gory details of numeric algorithms, it just provides a nice template interface. Access to matrix libs is provided through boost bindings, e.g. LaPack Bindings.
I used MKL for that problem. Of course it isn't connected with uBLAS
I am looking for an efficient eigensolver ( language not important, although I would be programming in C#), that utilizes the multi-core features found in modern CPU. Being able to work directly with pardiso solver is a major plus. My matrix are mostly sparse matrix, so an ideal solver should be able to take advantage of this fact and greatly enhance the memory usage and performance.
So far I have only found LAPACK and ARPACK. The LAPACK, as implemented in Intel MKL, is a good candidate, as it offers multi-core optimization. But it seems that the drivers inside the LAPACK don't work directly with pardiso solver, furthermore, it seems that they don't take advantage of sparse matrix ( but I am not sure on this point).
ARPACK, on the other hand, seems to be pretty hard to setup in Windows environment, and the parallel version, PARPACK, doesn't work so well. The bonus point is that it can work with pardiso solver.
The best would be Intel MKL + ARPACK with multi-core speedup. Not sure whether there is any existing implementations that already do what I want to do?
I'm working on a problem with needs very similar to the ones you state. I'm considering FEAST:
http://www.ecs.umass.edu/~polizzi/feast/index.htm
I'm trying to make it work right now, but it seems perfect. I'm interested in hearing what your experience with it is, if you use it.
cheers
Ned
Have a look at the Eigen2 library.
I've implemented it already, in C#.
The idea is that one must convert the matrix format in CSR format. Then, one can use MKL to compute linear equation solving algorithm ( using pardiso solver), the matrix-vector manipulation.