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 67 of file qrm_factorization_core.F90.
References activate(), assemble(), clean(), fill_queue(), i, panel(), 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_facto_flops_, qrm_task_mod::qrm_get_task(), qrm_task_mod::qrm_init_task_queue(), 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_queue_card(), 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 701 of file qrm_factorization_core.F90.
References _qrm_activate_front(), 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(), and qrm_queue_mod::qrm_queue_rm().
subroutine _qrm_factorization_core::assemble | ( | type(qrm_task_type) | task, |
integer | thn | ||
) |
Definition at line 787 of file qrm_factorization_core.F90.
References 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 470 of file qrm_factorization_core.F90.
References qrm_task_mod::qrm_sched_task().
subroutine _qrm_factorization_core::clean | ( | type(qrm_task_type) | task, |
integer | thn | ||
) |
Definition at line 867 of file qrm_factorization_core.F90.
References _qrm_clean_front(), 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 266 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 436 of file qrm_factorization_core.F90.
References front_sched_act(), and qrm_task_mod::qrm_sched_task().
logical function _qrm_factorization_core::front_sched_ops | ( | type(_qrm_front_type) | front | ) |
Definition at line 322 of file qrm_factorization_core.F90.
References front_sched_ops(), and qrm_task_mod::qrm_sched_task().
subroutine _qrm_factorization_core::panel | ( | type(qrm_task_type) | task, |
integer | thn, | ||
work, | |||
real(kind(1.d0)) | flops | ||
) |
Definition at line 497 of file qrm_factorization_core.F90.
References i, and qrm_task_mod::qrm_sched_task().
subroutine _qrm_factorization_core::update | ( | type(qrm_task_type) | task, |
integer | thn, | ||
work, | |||
real(kind(1.d0)) | flops | ||
) |
Definition at line 607 of file qrm_factorization_core.F90.
References i, and qrm_task_mod::qrm_sched_task().