QR_MUMPS
Functions/Subroutines
dqrm_factorization_core.F90 File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine dqrm_factorization_core (qrm_mat)
 This is the main factorization routine. It performs the factorization of all the fronts that have been assigned to the node (MPI task). The whole process is OpenMP parallel. More...
 
subroutine fill_queue ()
 
logical function front_sched_ops (front)
 
logical function front_sched_act (front)
 
subroutine check_facto_over ()
 
subroutine panel (task, thn, work, flops)
 
subroutine update (task, thn, work, flops)
 
subroutine activate (task, thn, flops)
 
subroutine assemble (task, thn)
 
subroutine clean (task, thn)
 

Function/Subroutine Documentation

subroutine dqrm_factorization_core::activate ( type(qrm_task_type task,
integer  thn,
real(kind(1.d0))  flops 
)
subroutine dqrm_factorization_core::assemble ( type(qrm_task_type task,
integer  thn 
)
subroutine dqrm_factorization_core::check_facto_over ( )
subroutine dqrm_factorization_core::clean ( type(qrm_task_type task,
integer  thn 
)
subroutine dqrm_factorization_core ( type(dqrm_spmat_type), target  qrm_mat)

This is the main factorization routine. It performs the factorization of all the fronts that have been assigned to the node (MPI task). The whole process is OpenMP parallel.

This factorization is completely dynamic and results in an out of order execution of computational and symbolic tasks. Each front is cut into block-columns. Computational tasks are scheduled on a per-front or per-block-column basis according to a graph of dependencies; each task is pushed on the queue of the thread who owns the related front. The ownership of a front is fixed at the moment where the front is activated. If a thread runs out of tasks to perform (i.e., its queue is empty) it can steal tasks from other threads (see the qrm_task_mod module for the details).

Six different types of tasks can be executed by a thread:

  • panel : the panel factorization of a column in a front
  • update : the update of a block-column wrt to a panel in a front
  • activate : activation of a front. this operation consists in computing the full structure of a front and allocating all the memory areas needed for the subsequent factorization
  • assemble : this operation consists in assemblying one block-column in the contribution block of a front into the father node
  • clean : cleans up a front, i.e., it deallocates all the memory areas that are no more needed
Parameters
[in,out]qrm_matThis is the main data structure associated to a problem. The dqrm_factorization_core assumes that the analysis has been done and thus that the qrm_matadata field contains meaningful stuff

Definition at line 68 of file dqrm_factorization_core.F90.

References activate(), assemble(), clean(), fill_queue(), panel(), qrm_error_mod::qrm_abort_, qrm_task_mod::qrm_clean_task_queue(), qrm_error_mod::qrm_err_act_restore(), qrm_error_mod::qrm_err_act_save(), qrm_error_mod::qrm_err_check(), qrm_error_mod::qrm_err_push(), qrm_error_mod::qrm_err_stack, qrm_facto_flops_, qrm_queue_mod::qrm_fifo_, qrm_task_mod::qrm_get_task(), qrm_task_mod::qrm_init_task_queue(), qrm_queue_mod::qrm_lifo_, qrm_nb_, qrm_mem_mod::qrm_par_mem_finalize(), qrm_mem_mod::qrm_par_mem_init(), qrm_queue_mod::qrm_queue_free(), qrm_queue_mod::qrm_queue_push(), qrm_task_mod::qrm_task_act_, qrm_task_mod::qrm_task_asm_, qrm_task_mod::qrm_task_cln_, qrm_task_mod::qrm_task_exit_, qrm_task_mod::qrm_task_pnl_, qrm_task_mod::qrm_task_queue_card(), qrm_task_mod::qrm_task_upd_, and update().

Referenced by dqrm_factorize().

subroutine dqrm_factorization_core::fill_queue ( )
logical function dqrm_factorization_core::front_sched_act ( type(dqrm_front_type front)

Definition at line 437 of file dqrm_factorization_core.F90.

References qrm_task_mod::qrm_sched_task(), and qrm_task_mod::qrm_task_act_.

Referenced by fill_queue().

logical function dqrm_factorization_core::front_sched_ops ( type(dqrm_front_type front)
subroutine dqrm_factorization_core::panel ( type(qrm_task_type task,
integer  thn,
real(kind(1.d0)), dimension(:)  work,
real(kind(1.d0))  flops 
)
subroutine dqrm_factorization_core::update ( type(qrm_task_type task,
integer  thn,
real(kind(1.d0)), dimension(:)  work,
real(kind(1.d0))  flops 
)