|
TECA
The Toolkit for Extreme Climate Analysis
|
Base class for MPI+threads+GPUs map reduce reduction over a set of indices. More...
#include <teca_index_reduce.h>
Public Member Functions | |
| teca_index_reduce (const teca_index_reduce &src)=delete | |
| teca_index_reduce (teca_index_reduce &&src)=delete | |
| teca_index_reduce & | operator= (const teca_index_reduce &src)=delete |
| teca_index_reduce & | operator= (teca_index_reduce &&src)=delete |
start_index | |
set the first index to process. Indices go from 0 to n-1. The default start_index is 0. | |
| void | set_start_index (const long &v) |
| const long & | get_start_index () const |
end_index | |
set the last index to process. Indices go from 0 to n-1. The default end_index is -1, which is used to indicate all indices should be processed. | |
| void | set_end_index (const long &v) |
| const long & | get_end_index () const |
Public Member Functions inherited from teca_threaded_algorithm | |
| std::shared_ptr< teca_threaded_algorithm > | shared_from_this () |
| std::shared_ptr< teca_threaded_algorithm const > | shared_from_this () const |
| teca_threaded_algorithm (const teca_threaded_algorithm &src)=delete | |
| teca_threaded_algorithm (teca_threaded_algorithm &&src)=delete | |
| teca_threaded_algorithm & | operator= (const teca_threaded_algorithm &src)=delete |
| teca_threaded_algorithm & | operator= (teca_threaded_algorithm &&src)=delete |
| const char * | get_class_name () const override |
| void | set_thread_pool_size (int n_threads) |
| unsigned int | get_thread_pool_size () const noexcept |
| Get the number of threads in the pool. More... | |
| void | set_data_request_queue (const p_teca_data_request_queue &queue) |
| explicitly set the thread pool to submit requests to More... | |
| void | set_verbose (const int &v) |
| const int & | get_verbose () const |
| void | set_bind_threads (const int &v) |
| const int & | get_bind_threads () const |
| void | set_stream_size (const int &v) |
| const int & | get_stream_size () const |
| void | set_poll_interval (const long long &v) |
| const long long & | get_poll_interval () const |
| void | set_threads_per_cuda_device (const int &v) |
| const int & | get_threads_per_cuda_device () const |
Public Member Functions inherited from teca_algorithm | |
| teca_algorithm (const teca_algorithm &src)=delete | |
| teca_algorithm (teca_algorithm &&src)=delete | |
| teca_algorithm & | operator= (const teca_algorithm &src)=delete |
| teca_algorithm & | operator= (teca_algorithm &&src)=delete |
| void | set_communicator (MPI_Comm comm) |
| MPI_Comm | get_communicator () |
| get the active communicator More... | |
| virtual teca_algorithm_output_port | get_output_port (unsigned int port=0) |
| void | set_input_connection (const teca_algorithm_output_port &port) |
| set an input to this algorithm More... | |
| virtual void | set_input_connection (unsigned int id, const teca_algorithm_output_port &port) |
| set an input to this algorithm More... | |
| virtual void | remove_input_connection (unsigned int id) |
| remove input connections More... | |
| void | clear_input_connections () |
| remove all input connections More... | |
| const_p_teca_dataset | get_output_data (unsigned int port=0) |
| void | pop_cache (unsigned int port=0, int top=0) |
| void | set_cache_size (unsigned int n) |
| set the cache size. the default is 1. (threadsafe) More... | |
| virtual int | update () |
| execute the pipeline from this instance up. More... | |
| virtual int | update (unsigned int port) |
| execute the pipeline from this instance up. More... | |
| virtual teca_metadata | update_metadata (unsigned int port=0) |
| get meta data considering this instance up. More... | |
| void | set_executive (p_teca_algorithm_executive exe) |
| set the executive More... | |
| p_teca_algorithm_executive | get_executive () |
| get the executive More... | |
| virtual void | to_stream (std::ostream &s) const |
| virtual void | from_stream (std::istream &s) |
| deserialize from the stream. More... | |
| void | set_verbose (const int &v) |
| const int & | get_verbose () const |
Protected Member Functions | |
| virtual p_teca_dataset | reduce (int device_id, const const_p_teca_dataset &left, const const_p_teca_dataset &right)=0 |
| virtual p_teca_dataset | finalize (int device_id, const const_p_teca_dataset &ds) |
| virtual std::vector< teca_metadata > | initialize_upstream_request (unsigned int port, const std::vector< teca_metadata > &input_md, const teca_metadata &request)=0 |
| virtual teca_metadata | initialize_output_metadata (unsigned int port, const std::vector< teca_metadata > &input_md)=0 |
| std::vector< teca_metadata > | get_upstream_request (unsigned int port, const std::vector< teca_metadata > &input_md, const teca_metadata &request) override |
| const_p_teca_dataset | execute (unsigned int port, const std::vector< const_p_teca_dataset > &input_data, const teca_metadata &request, int streaming) override |
| teca_metadata | get_output_metadata (unsigned int port, const std::vector< teca_metadata > &input_md) override |
| consumes index metadata, and partitions indices across MPI ranks. More... | |
| virtual const_p_teca_dataset | execute (unsigned int port, const std::vector< const_p_teca_dataset > &input_data, const teca_metadata &request, int streaming) |
| const_p_teca_dataset | execute (unsigned int port, const std::vector< const_p_teca_dataset > &input_data, const teca_metadata &request) override |
Protected Member Functions inherited from teca_threaded_algorithm | |
| const_p_teca_dataset | execute (unsigned int port, const std::vector< const_p_teca_dataset > &input_data, const teca_metadata &request) override |
| const_p_teca_dataset | request_data (teca_algorithm_output_port &port, const teca_metadata &request) override |
Protected Member Functions inherited from teca_algorithm | |
| void | set_number_of_input_connections (unsigned int n) |
| void | set_number_of_output_ports (unsigned int n) |
| virtual void | set_modified () |
| void | set_modified (unsigned int port) |
| an overload to set_modified by port More... | |
| virtual teca_metadata | get_cache_key (unsigned int port, const teca_metadata &request) const |
| virtual teca_metadata | get_output_metadata (teca_algorithm_output_port ¤t) |
| virtual int | validate_cache (teca_algorithm_output_port ¤t) |
| virtual void | clear_modified (teca_algorithm_output_port current) |
| const_p_teca_dataset | get_output_data (unsigned int port, const teca_metadata &request) |
| int | cache_output_data (unsigned int port, const teca_metadata &request, const_p_teca_dataset &data) |
| void | clear_cache (unsigned int port) |
| clear the cache on the given output port More... | |
| unsigned int | get_number_of_input_connections () |
| get the number of input connections More... | |
| teca_algorithm_output_port & | get_input_connection (unsigned int i) |
| void | clear_modified (unsigned int port) |
| clear the modified flag on the i'th output More... | |
| int | get_modified (unsigned int port) const |
| return the output port's modified flag value More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from teca_threaded_algorithm | |
| static p_teca_threaded_algorithm | New () |
Protected Attributes inherited from teca_algorithm | |
| int | verbose |
Base class for MPI+threads+GPUs map reduce reduction over a set of indices.
The available indices are partitioned across MPI ranks and threads. Threads are assigned to service GPUs or CPU cores. One can restrict operation to a range of time steps by setting first and last indices to process.
| key | description |
|---|---|
| index_initializer_key | Holds the name of the key that tells how many |
| indices are available. The named key must also | |
| be present and should contain the number of | |
| indices available. | |
| index_request_key | Holds the name of the key used to request a |
| specific index. Requests are generated with this | |
| name set to a specific index to be processed | |
| some upstream algorithm is expected to produce | |
| the data associated with the given index. |
|
overrideprotectedvirtual |
Uses MPI communication to collect remote data for required for the reduction. Calls ::reduce with each pair of datasets until the datasets across all threads and ranks are reduced into a single dataset, which is returned.
Reimplemented from teca_threaded_algorithm.
|
inlineprotectedvirtual |
An override that is called when the reduction is complete. The default implementation passes data through. This might be used for instance to complete an averaging operation where the ::reduce override sums the data and the ::finalize override scales by 1/N, where N is the number of datasets summed.
| [in] | device_id | The device that should be used for the reduction. A value of -1 indicates the CPU should be used. |
| [in] | ds | the reduced dataset |
Reimplemented in teca_programmable_reduce.
|
inline |
Get the value of the end_index algorithm property
|
overrideprotectedvirtual |
consumes index metadata, and partitions indices across MPI ranks.
Reimplemented from teca_algorithm.
|
inline |
Get the value of the start_index algorithm property
|
overrideprotectedvirtual |
Generates an upstream request for each index. will call initialize_upstream_request and apply the results to all time steps.
Reimplemented from teca_algorithm.
|
protectedpure virtual |
An override that allows derived classes to report what they can produce. this will be called from ::get_output_metadata which will strip out time and partition time across MPI ranks.
Implemented in teca_programmable_reduce, teca_table_reduce, and teca_cf_time_axis_data_reduce.
|
protectedpure virtual |
An override that allows derived classes to generate upstream requests that will be applied over all time steps. derived classes implement this method instead of ::get_upstream_request, which here is already implemented to handle the application of requests over the index set.
Implemented in teca_programmable_reduce, teca_table_reduce, and teca_cf_time_axis_data_reduce.
|
protectedpure virtual |
An override that implements the reduction. given two datasets a left and right, reduce into a single dataset and return.
| [in] | device_id | The device that should be used for the reduction. A value of -1 indicates the CPU should be used. |
| [in] | left | a dataset to reduce |
| [in] | right | a dataset to reduce |
Implemented in teca_programmable_reduce, teca_table_reduce, and teca_cf_time_axis_data_reduce.
|
inline |
Set the value of the end_index algorithm property
|
inline |
Set the value of the start_index algorithm property