QR_MUMPS
Functions/Subroutines
qrm_factorization_core.F90 File Reference

This file holds the core of the QR numerical factorization. More...

Go to the source code of this file.

Functions/Subroutines

subroutine _qrm_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)
 

Detailed Description

This file holds the core of the QR numerical factorization.

Date
2016-01-29 22:22:30 +0100 (Fri, 29 Jan 2016)
Author
abuttari
Version
1.1
Revision
2075

Definition in file qrm_factorization_core.F90.

Function/Subroutine Documentation

subroutine _qrm_factorization_core ( type(_qrm_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 _qrm_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 qrm_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 _qrm_factorize().

subroutine _qrm_factorization_core::activate ( type(qrm_task_type task,
integer  thn,
real(kind(1.d0))  flops 
)
subroutine _qrm_factorization_core::assemble ( type(qrm_task_type task,
integer  thn 
)
subroutine _qrm_factorization_core::check_facto_over ( )
subroutine _qrm_factorization_core::clean ( type(qrm_task_type task,
integer  thn 
)
subroutine _qrm_factorization_core::fill_queue ( )
logical function _qrm_factorization_core::front_sched_act ( type(_qrm_front_type front)
logical function _qrm_factorization_core::front_sched_ops ( type(_qrm_front_type front)
subroutine _qrm_factorization_core::panel ( type(qrm_task_type task,
integer  thn,
  work,
real(kind(1.d0))  flops 
)
subroutine _qrm_factorization_core::update ( type(qrm_task_type task,
integer  thn,
  work,
real(kind(1.d0))  flops 
)