Commits

Author Commit Message Labels Comments Date
Michael Lange
Threading VecMDot_Seq This is essentially a backport from petsc-dev using the same approach as the threadcomm implementation.
Michael Lange
Fixing issues for non-OpenMP enabled builds.
Michael Lange
Bugfix for row-based thread partitioning.
Michael Lange
Bugfix for NZ-based thread partitioning.
Michael Lange
Making NZ-balancing optional (option: -matmult_nz_balance): * Adding an even contiguous-row thread partitioning scheme for N-1 threads * Explicit NZ-based thread balancing is activated via the run-time option: -matmult_nz_balance
Michael Lange
Code cleanup: * MatThreadPartition() now prescribes boundaries for all threads, including the comm thread. * This allows all MatMult()/MatMultAdd() to simply read the partition boundaries from the matrix object, regardless of execution mode.
Michael Lange
Fixing the MPI-only case.
Michael Lange
Switching MatMult to task-based threading with explicit load balancing: * Applies to all MatMult_Seq and MatMult_MPI for AIJ and BAIJ matrices * Thread 0 is dedicated to MPI communication and disabled on single-MPI runs * Thread boundaries are computed in MatAssemblyEnd_Seq and cached with matrix objects * Thread-level load balancing is based on non-zeros rather than rows: - Initial greedy allocation based on nz - Followed by a simple local diffusion algorit…
Michael Lange
Final corrections: * Another bugfix for MatThreadPartition * Fixing the Flops logging * Adding (void*) casts to interface guards
Michael Lange
Fixing the previous fix.
Michael Lange
Bug fix for MatThreadPartition.
Michael Lange
Adding task-based threading to all remaining MatMultAdd_SeqBAIJ.
Michael Lange
Cleaning up MatMult_SeqBAIJ for all block sizes.
Michael Lange
Cleaning up thread partitioning: * Bug fix to avaid buffer overruns in MatThreadPartition * Removing obsolete even row-wise partitioning function
Michael Lange
Add threading to the remaining MatMult_SeqBAIJ functions.
Michael Lange
Fixing previous commit.
Michael Lange
Reverting matrix first-touch to use vector-based threading.
Michael Lange
Guarding the task-based MatMult/MatMultAdd implementations: * Check the function pointer at the interface level * Use conditional pragmas to ensure only task-based implementations are executed in parallel * This avoids multiple threads entering non-threaded functions, eg. PCMult_Eisenstat
Michael Lange
Fixing single-MPI case for thread-balanced MatMult/MatMultAdd: * Thread zero does nothing if it finds itself in MatMult_SeqAIJ/MatMult_SeqBAIJ
Michael Lange
Use MatMultAdd interface in MatSOR_MPIAIJ/MatSOR_MPIBAIJ.
Michael Lange
Fixing MatMultAdd for block matrices: * Parallel section gets initialised in MatMult/MatMultAdd interfaces * MatMultAdd uses task-based threading for block sizes 1, 3 and 4
Michael Lange
Fixing the single MPI case: * Parallel section lifted to MatMult interface to capture direct MatMult_SeqAIJ invocation * Single-MPI/multi-threaded will not use thread 0 in MatMult_SeqAIJ, leaving n-1 worker threads
Michael Lange
Merge from petsc-3.3
Michael Lange
Switch to thread-balanced partitioning for block matrices.
Michael Lange
Applying task-based MPI overlap to block matrices.
Michael Lange
Small corrections and bug fix: * Deallocate thread boundaries when destroying matrix * Handle MatMult_SeqAIJ/MatMultAdd_SeqAIJ being called from non-parallel sections * Deal with nz=0 corner case
Michael Lange
Fixing the default thread partitioning.
Michael Lange
Small fix to the local diffusion thread partitioning.
Michael Lange
Adding a simple local diffusion to the thread-level partitioning.
Michael Lange
Adding nz-based thread partitioning to improve thread-level load balance.
  1. Prev
  2. Next