QR_MUMPS
|
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) |
This file holds the core of the QR numerical factorization.
Definition in file qrm_factorization_core.F90.
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:
[in,out] | qrm_mat | This 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 | ||
) |
Definition at line 702 of file qrm_factorization_core.F90.
References _qrm_activate_front(), qrm_error_mod::qrm_abort_, _qrm_fdata_mod::qrm_activable_, _qrm_fdata_mod::qrm_active_, _qrm_fdata_mod::qrm_done_, qrm_error_mod::qrm_err_act_restore(), qrm_error_mod::qrm_err_act_save(), qrm_error_mod::qrm_err_check(), qrm_queue_mod::qrm_queue_push(), qrm_queue_mod::qrm_queue_rm(), and _qrm_fdata_mod::qrm_ready_.
subroutine _qrm_factorization_core::assemble | ( | type(qrm_task_type) | task, |
integer | thn | ||
) |
Definition at line 788 of file qrm_factorization_core.F90.
References qrm_error_mod::qrm_abort_, _qrm_fdata_mod::qrm_active_, _qrm_fdata_mod::qrm_done_, qrm_error_mod::qrm_err_act_restore(), qrm_error_mod::qrm_err_act_save(), and qrm_error_mod::qrm_err_check().
subroutine _qrm_factorization_core::check_facto_over | ( | ) |
Definition at line 471 of file qrm_factorization_core.F90.
References qrm_task_mod::qrm_sched_task(), and qrm_task_mod::qrm_task_exit_.
subroutine _qrm_factorization_core::clean | ( | type(qrm_task_type) | task, |
integer | thn | ||
) |
Definition at line 868 of file qrm_factorization_core.F90.
References _qrm_clean_front(), qrm_error_mod::qrm_abort_, _qrm_fdata_mod::qrm_done_, qrm_error_mod::qrm_err_act_restore(), qrm_error_mod::qrm_err_act_save(), qrm_error_mod::qrm_err_check(), and qrm_queue_mod::qrm_queue_rm().
subroutine _qrm_factorization_core::fill_queue | ( | ) |
Definition at line 267 of file qrm_factorization_core.F90.
References check_facto_over(), front_sched_act(), front_sched_ops(), and qrm_queue_mod::qrm_queue_next().
logical function _qrm_factorization_core::front_sched_act | ( | type(_qrm_front_type) | front | ) |
Definition at line 437 of file qrm_factorization_core.F90.
References qrm_task_mod::qrm_sched_task(), and qrm_task_mod::qrm_task_act_.
logical function _qrm_factorization_core::front_sched_ops | ( | type(_qrm_front_type) | front | ) |
Definition at line 323 of file qrm_factorization_core.F90.
References qrm_task_mod::qrm_sched_task(), qrm_task_mod::qrm_task_asm_, qrm_task_mod::qrm_task_cln_, qrm_task_mod::qrm_task_pnl_, and qrm_task_mod::qrm_task_upd_.
subroutine _qrm_factorization_core::panel | ( | type(qrm_task_type) | task, |
integer | thn, | ||
work, | |||
real(kind(1.d0)) | flops | ||
) |
Definition at line 498 of file qrm_factorization_core.F90.
References _qrm_fdata_mod::qrm_busy_, _qrm_fdata_mod::qrm_done_, _qrm_fdata_mod::qrm_factorized_, qrm_task_mod::qrm_sched_task(), and qrm_task_mod::qrm_task_upd_.
subroutine _qrm_factorization_core::update | ( | type(qrm_task_type) | task, |
integer | thn, | ||
work, | |||
real(kind(1.d0)) | flops | ||
) |
Definition at line 608 of file qrm_factorization_core.F90.
References _qrm_fdata_mod::qrm_busy_, _qrm_fdata_mod::qrm_done_, _qrm_fdata_mod::qrm_factorized_, qrm_task_mod::qrm_sched_task(), and qrm_task_mod::qrm_task_pnl_.