MONC
Data Types | Modules | Functions/Subroutines | Variables
reduction-inter-io.F90 File Reference

Go to the source code of this file.

Data Types

type  reduction_inter_io_mod::reduction_progress_type
 

Modules

module  reduction_inter_io_mod
 Reduction inter IO action which will perform reductions between IO servers. This is not as trivial as calling the MPI function as it is nondeterministic when messages will arrive and hence when one reduction on a process and a reduction on another should be called.
 

Functions/Subroutines

subroutine, public reduction_inter_io_mod::init_reduction_inter_io (io_configuration)
 Initialises the reduction action. More...
 
subroutine reduction_inter_io_mod::handle_recv_data_from_io_server (io_configuration, data_buffer, inter_io_index)
 Handles the receiving of data from some other IO server. This is issued call back style within a thread to handle that data. More...
 
logical function, public reduction_inter_io_mod::check_reduction_inter_io_for_completion (io_configuration)
 Checks this action for completion, when all are completed then the IO server can shutdown as this is called once all MONC processes have deregistered. More...
 
subroutine, public reduction_inter_io_mod::finalise_reduction_inter_io (io_configuration)
 Finalises the reduction action, waiting for all outstanding requests and then freeing data. More...
 
subroutine, public reduction_inter_io_mod::perform_inter_io_reduction (io_configuration, field_values, field_size, reduction_field_name, reduction_op, root, timestep, completion_procedure)
 Actually handles the processing for this data wrt the vertical reduction. More...
 
subroutine reduction_inter_io_mod::clean_progress (myrank)
 
logical function reduction_inter_io_mod::check_and_clean_progress (myrank)
 Checks all the reduction progresses and will remove any that have completed. This is designed to be called from an IO server other than 0 (the master IO server) and it checks if the outstanding async send handle has completed. Checking on the master IO server or checking any progress that is not currently sending is fine and will not impact the correctness (but obviously the progress wont be freed) More...
 
subroutine reduction_inter_io_mod::integrate_io_server_collective_values (reduction_op, reduction_progress, single_server_values, number_elements, collective_values_empty)
 Integrates the collective values from another IO server into the currently stored values. More...
 
subroutine reduction_inter_io_mod::handle_local_moncs_completed_collective (io_configuration, reduction_progress)
 Handles the case where the local MONC processes have completed their collective operation for a specific reduction and, for this IO server, it either needs to send its value to the master IO server or, if it is the master, check for completion. More...
 
subroutine reduction_inter_io_mod::handle_process_recv_from_other_io_server (io_configuration, inter_io_comm, myrank, data_buffer, number_io_servers)
 Handles the data received from another IO server, locates the correct reduction progress, appends the information and then checks for & deals with the situation where that reduction is completed. More...
 
subroutine reduction_inter_io_mod::handle_collective_completed (io_configuration, reduction_progress)
 Handles the situation where collective communication for a specific reduction has completed across all IO servers. More...
 
type(reduction_progress_type) function, pointer reduction_inter_io_mod::find_or_add_reduction_progress (timestep, reduction_operator, root, field_name, completion_procedure)
 Finds or adds a specific reduction progress based upon the timestep and reduction operator. If none can be found then a new progress is added in. With new progresses this procedure will initialise them. More...
 
type(reduction_progress_type) function, pointer reduction_inter_io_mod::find_reduction_progress (timestep, reduction_operator, field_name, issue_read_lock)
 Locates a specific reduction progress based upon the timestep, operator and field name. More...
 
subroutine reduction_inter_io_mod::remove_reduction_progress (reduction_progress)
 Removes a specific reduction progress. More...
 
character(len=string_length) function reduction_inter_io_mod::generate_reduction_key (field_name, timestep, reduction_operator)
 Generates the lookup key that is used for the map storage of reduction progresses. More...
 
type(reduction_progress_type) function, pointer reduction_inter_io_mod::retrieve_reduction_progress (mapentry)
 Helper function to retrieve the reduction progress from a mapentry. More...
 
integer function, public reduction_inter_io_mod::get_reduction_operator (op_string)
 Given the map of action attributes this procedure will identify the reduction operator that has been selected by the configuration. More...
 

Variables

integer, parameter reduction_inter_io_mod::mean =1
 
integer, parameter reduction_inter_io_mod::min =2
 
integer, parameter reduction_inter_io_mod::max =3
 
integer, parameter reduction_inter_io_mod::sum =4
 
integer, parameter reduction_inter_io_mod::my_inter_io_tag =1
 
integer, parameter reduction_inter_io_mod::perform_clean_every =200
 
character(len= *), parameter reduction_inter_io_mod::my_inter_io_name ="reductioninterio"
 
integer, volatile reduction_inter_io_mod::reduction_progress_rwlock
 
integer, volatile reduction_inter_io_mod::inter_io_description_mutex
 
integer, volatile reduction_inter_io_mod::clean_progress_mutex
 
integer, volatile reduction_inter_io_mod::reduction_count_mutex
 
integer, volatile reduction_inter_io_mod::previous_clean_reduction_count
 
integer, volatile reduction_inter_io_mod::reduction_count
 
type(hashmap_type), volatile reduction_inter_io_mod::reduction_progresses
 
logical, volatile reduction_inter_io_mod::initialised =.false.