Template Numerical Library: TNL::Containers::ByteArraySynchronizer< Device, Index > Class Template Reference

Template Numerical Library version\ main:c7077e4fd

Loading...
Searching...
No Matches
Public Types | Public Member Functions | Public Attributes | List of all members
TNL::Containers::ByteArraySynchronizer< Device, Index > Class Template Referenceabstract
Collaboration diagram for TNL::Containers::ByteArraySynchronizer< Device, Index >:
[legend]

## Public Types
enum class | AsyncPolicy : std::uint8_t { synchronous , deferred , threadpool , async }
using | ByteArrayView = ArrayView< std::uint8_t, Device, Index >
using | RequestsVector = std::vector< MPI_Request >

## Public Member Functions
virtual void | synchronizeByteArray (ByteArrayView array, int bytesPerValue)=0
| Main synchronization function.
void | synchronizeByteArrayAsync (ByteArrayView array, int bytesPerValue, AsyncPolicy policy=AsyncPolicy::synchronous)
| An asynchronous version of synchronizeByteArray.
virtual RequestsVector | synchronizeByteArrayAsyncWorker (ByteArrayView array, int bytesPerValue)=0

## Public Attributes
std::future< void > | async_op
| Can be used for checking if a synchronization started asynchronously has been finished.
std::size_t | async_ops_count = 0
Timer | async_start_timer
Timer | async_wait_before_start_timer
Timer | async_wait_timer

## Member Function Documentation

## ◆ synchronizeByteArray()

template<typename Device, typename Index>

virtual void TNL::Containers::ByteArraySynchronizer< Device, Index >::synchronizeByteArray | ( | ByteArrayView | array,
|  | int | bytesPerValue )
| pure virtual

Main synchronization function.

This is only a pure virtual function – the functionality must be implemented in a subclass.

Implemented in TNL::Containers::DistributedArraySynchronizer< DistributedArray >, TNL::Meshes::DistributedMeshes::DistributedMeshSynchronizer< DistributedMesh, EntityDimension >, and TNL::Meshes::DistributedMeshes::DistributedMeshSynchronizer< DistributedMesh< Grid< MeshDimension, GridReal, Device, Index > >, MeshDimension >.

## ◆ synchronizeByteArrayAsync()

template<typename Device, typename Index>

void TNL::Containers::ByteArraySynchronizer< Device, Index >::synchronizeByteArrayAsync | ( | ByteArrayView | array,
|  | int | bytesPerValue,
|  | AsyncPolicy | policy = AsyncPolicy::synchronous )
| inline

An asynchronous version of synchronizeByteArray.

Note that this method is not thread-safe - only the thread which created and "owns" the instance of this object can call this method.

Note that at most one async operation may be active at a time, the following calls will block until the pending operation is finished.

## Member Data Documentation

## ◆ async_op

template<typename Device, typename Index>

std::future< void > TNL::Containers::ByteArraySynchronizer< Device, Index >::async_op

Can be used for checking if a synchronization started asynchronously has been finished.

Note that derived classes must make this check in the destructor, otherwise running synchronizeByteArrayAsync would lead to the error pure virtual method called when the derived object is destructed before the async operation finishes. This cannot be implemented in the base class destructor, because the derived destructor is run first.

~Derived() { if( this->async_op.valid() ) this->async_op.wait(); }

The documentation for this class was generated from the following file:

- src/TNL/Containers/ByteArraySynchronizer.h