110 likes | 114 Views
The LAPACK for Clusters (LFC) project provides an efficient and scalable implementation of LAPACK linear algebra routines for solving linear systems in parallel on cluster environments. It supports interactive clients such as Mathematica, MATLAB, and Python. LFC offers both in-memory and disk-based routines, with limitations on data size and I/O costs. The project also provides ease of deployment and integrates with various languages and technologies.
E N D
The Lapack for Clusters (LFC) Project Piotr Luszczek The MathWorks, Inc.
Clients Tunnel (IP, TCP, ....) Server Software Firewall 0,0 Server LFC: Overview • Interactive clients • Mathematica • MATLAB • Python
LFC: Behind the scenes x = lfc.gesv(A, b) Batch mode bypass x = b.copy() command('pdgesv', A.id, x.id) call pdgesv(A, x) Internet Intranet Shared memory ... send(c_sckt, buf) recv(s_sckt, buf)
LFC: Current functionality • Linear systems (via factorizations) • Cholesky: A = UTU A = LLT • Gaussian: PA = LU • Least Squares: A = QR • Singular- and eigen-value problems • A = UΣVT (thin SVD) • AV=VΛ=AHV (symmetric AEP) • AV = VΛ (non-symmetric AEP) • Norms, condition-number estimates • Precision, data types • Single, double • Real, complex • Mixed precision (by upcasting) • User data routines • Loading/Saving • MPI I/O • ... • Generating • Plug-ins • Moving • More to come… • Now working on sparse matrices support
LFC: Design and implementation Prototyping Deployment • C • MathLink • MEX Java Client logic (Python) PLW Jython Network beowulf $ ./configure beowulf $ make beowulf $ make install beowulf $ mpiexec server Server logic (Python) PLW Pyrex beowulf $ python setup.py install beowulf $ mpirun python server.py
MATLAB with LFC (parallel):n = lfc(1000); nrhs = 1; A = rand(n); b = rand(n, 1); x = A \ b; r = A*x – b; norm(r, ‘fro’) MATLAB – no LFC (sequential): n = 1000; nrhs = 1; A = rand(n); b = rand(n, 1); x = A \ b; r = A*x – b; norm(r, ‘fro’) Python with LFC (parallel): n = 1000 nrhs = 1 A = lfc.rand(n) b = lfc.rand(n, 1) x = lfc.solve(A, b) r = A*x – b print r.norm(‘F’) Sample LFC code: Linear system solve
In-memory routines LFC_gels() LFC_gesv() LFC_posv() Limitations Data must fit on caller Cluster state functions LFC_hosts_create() LFC_hosts_free() LFC_get_available_CPU() LFC_get_free_memory() Disk-based routines LFC_gels_file_all() LFC_gesv_file_all() LFC_posv_file_all() Limitations Must pay I/O cost each time LFC’s C interface: Sequential calls, parallel execution
Only one file to download Just type: ./configure && make && make install LFC’s ease of deployment LFC clients: C, Mathematica, MATLAB, Python serial interface ScaLAPACK parallel interface PBLAS global addressing local addressing LAPACK BLAS (LFC) portable platform specific BLACS BLAS (vendor) MPI External to LFC External to LFC
Client Python Sockets MATLAB Embedded Java Jython Reuse of Python code C/C++ Code: fork() execvp() Shell (implicit) mpirun mpiexec Server Libraries MPI BLAS BLACS LAPACK ScaLAPACK Languages Python Pyrex (C wrappers) PLW Python compiler Translation to C Software technology used by LFC
Contact Piotr Luszczek The MathWorks, Inc.(508) 647-6767luszczek@eecs.utk.edu http://icl.cs.utk.edu/lfc/