All Projects → fverdugo → PartitionedArrays.jl

fverdugo / PartitionedArrays.jl

Licence: MIT License
Vectors and sparse matrices partitioned into pieces for parallel distributed-memory computations.

Programming Languages

julia
2034 projects

Projects that are alternatives of or similar to PartitionedArrays.jl

pbdML
No description or website provided.
Stars: ✭ 13 (-71.11%)
Mutual labels:  hpc, linear-algebra, mpi
fml
Fused Matrix Library
Stars: ✭ 24 (-46.67%)
Mutual labels:  hpc, linear-algebra, mpi
dbcsr
DBCSR: Distributed Block Compressed Sparse Row matrix library
Stars: ✭ 65 (+44.44%)
Mutual labels:  hpc, linear-algebra, mpi
Singularity-tutorial
Singularity 101
Stars: ✭ 31 (-31.11%)
Mutual labels:  hpc, mpi
az-hop
The Azure HPC On-Demand Platform provides an HPC Cluster Ready solution
Stars: ✭ 33 (-26.67%)
Mutual labels:  hpc, mpi
t8code
Parallel algorithms and data structures for tree-based AMR with arbitrary element shapes.
Stars: ✭ 37 (-17.78%)
Mutual labels:  hpc, mpi
azurehpc
This repository provides easy automation scripts for building a HPC environment in Azure. It also includes examples to build e2e environment and run some of the key HPC benchmarks and applications.
Stars: ✭ 102 (+126.67%)
Mutual labels:  hpc, mpi
hpc
Learning and practice of high performance computing (CUDA, Vulkan, OpenCL, OpenMP, TBB, SSE/AVX, NEON, MPI, coroutines, etc. )
Stars: ✭ 39 (-13.33%)
Mutual labels:  hpc, mpi
arbor
The Arbor multi-compartment neural network simulation library.
Stars: ✭ 87 (+93.33%)
Mutual labels:  hpc, mpi
gslib
sparse communication library
Stars: ✭ 22 (-51.11%)
Mutual labels:  hpc, mpi
ACCL
Accelerated Collective Communication Library: MPI-like communication operations for Xilinx Alveo accelerators
Stars: ✭ 28 (-37.78%)
Mutual labels:  hpc, mpi
float
Single precision (float) matrices for R.
Stars: ✭ 41 (-8.89%)
Mutual labels:  hpc, linear-algebra
ParMmg
Distributed parallelization of 3D volume mesh adaptation
Stars: ✭ 19 (-57.78%)
Mutual labels:  hpc, mpi
Foundations of HPC 2021
This repository collects the materials from the course "Foundations of HPC", 2021, at the Data Science and Scientific Computing Department, University of Trieste
Stars: ✭ 22 (-51.11%)
Mutual labels:  hpc, mpi
hp2p
Heavy Peer To Peer: a MPI based benchmark for network diagnostic
Stars: ✭ 17 (-62.22%)
Mutual labels:  hpc, mpi
pressio
Model reduction for linear and nonlinear dynamical systems: core C++ library
Stars: ✭ 35 (-22.22%)
Mutual labels:  hpc, linear-algebra
Hpcinfo
Information about many aspects of high-performance computing. Wiki content moved to ~/docs.
Stars: ✭ 171 (+280%)
Mutual labels:  hpc, mpi
Batch Shipyard
Simplify HPC and Batch workloads on Azure
Stars: ✭ 240 (+433.33%)
Mutual labels:  hpc, mpi
pystella
A code generator for grid-based PDE solving on CPUs and GPUs
Stars: ✭ 18 (-60%)
Mutual labels:  hpc, mpi
libquo
Dynamic execution environments for coupled, thread-heterogeneous MPI+X applications
Stars: ✭ 21 (-53.33%)
Mutual labels:  hpc, mpi

Documentation Build Status Coverage

What

This package provides a data-oriented parallel implementation of partitioned vectors and sparse matrices needed in FD, FV, and FE simulations. The long-term goal of this package is to provide (when combined with other Julia packages as IterativeSolvers.jl) a Julia alternative to well-known distributed algebra back ends such as PETSc. PartitionedArrays is being used by other projects such as GridapDistributed, the parallel distributed-memory extension of the Gridap FE library.

The basic types implemented in PartitionedArrays are:

  • AbstractBackend: Abstract type to be specialized for different execution models. Now, this package provides SequentialBackend and MPIBackend.
  • AbstractPData: The low level abstract type representing some data partitioned over several chunks or parts. This is the core component of the data-oriented parallel implementation. Now, this package provides SequentialData and MPIData.
  • PRange: A specialization of AbstractUnitRange that has information about how the ids in the range are partitioned in different chunks. This type is used to describe the parallel data layout of rows and cols in PVector and PSparseMatrix objects.
  • PVector: A vector partitioned in (overlapping or non-overlapping) chunks.
  • PSparseMatrix: A sparse matrix partitioned in (overlapping or non-overlapping) chunks of rows.
  • PTimer: A time measuring mechanism designed for the execution model of this package.

On these types, several communication operations are defined:

  • gather!, gather, gather_all!, gather_all
  • reduce, reduce_all, reduce_main
  • scatter
  • emit (aka broadcast)
  • iscan, iscan_all, iscan_main
  • xscan, xscan_all, xscan_main
  • exchange! exchange, async_exchange! async_exchange
  • assemble!, async_assemble!

Why

One can use PETSc bindings like PETSc.jl for parallel computations in Julia, but this approach has some limitations:

  • PETSc is hard-coded for vectors/matrices of some particular element types (e.g. Float64 and ComplexF64).

  • PETSc forces one to use MPI as the parallel execution model. Drivers are executed as mpirun -np 4 julia --project=. input.jl, which means no interactive Julia sessions, no Revise, no Debugger. This is a major limitation to develop parallel algorithms.

This package aims to overcome these limitations. It implements (and allows to implement) parallel algorithms in a generic way independently of the underlying hardware / message passing software that is eventually used. At this moment, this library provides two back ends for running the generic parallel algorithms:

  • SequentialBackend: The parallel data is split in chunks, which are stored in a conventional (sequential) Julia session (typically in an Array). The tasks in the parallel algorithms are executed one after the other. Note that the sequential back end does not mean to distribute the data in a single part. The data can be split in an arbitrary number of parts.
  • MPIBackend: Chunks of parallel data and parallel tasks are mapped to different MPI processes. The drivers are to be executed in MPI mode, e.g., mpirun -n 4 julia --project=. input.jl.

The SequentialBackend is specially handy for developing new code. Since it runs in a standard Julia session, one can use tools like Revise and Debugger that will certainly do your life easier at the developing stage. Once the code works with the SequentialBackend, it can be automatically deployed in a supercomputer via the MPIBackend. Other back ends like a ThreadedBacked, DistributedBackend, or MPIXBackend can be added in the future.

Performance

This figure shows a strong scaling test of the total time spent in setting up the main components of a FE simulation using PartitionedArrays as the distributed linear algebra backend. A good scaling is obtained beyond 25 thousand degrees of freedom (DOFs) per cpu core, which is usualy considered the point in which scalability starts to significanlty degrade in FE computations.

The wall time includes

  • Generation of a distributed Cartesian FE mesh
  • Generation of local FE spaces
  • Generation of a global DOF numbering
  • Assembly of the distribtued sparse linear system
  • Interpolation of a manufactured solution
  • Computation of the residual (incudes a matrix-vector product) and its norm.

The results are obtained with the package PartitionedPoisson.jl.

How to collaborate

We have a number of issues waiting for help. You can start contributing to PartitionedArrays.jl by solving some of those issues. Contact with us to coordinate.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].