14#include "arccore/base/ReferenceCounter.h"
16#include "arccore/message_passing/PointToPointMessageInfo.h"
18#include "arcane/utils/Collection.h"
19#include "arcane/utils/ITraceMng.h"
20#include "arcane/utils/NotImplementedException.h"
21#include "arcane/utils/Real2.h"
22#include "arcane/utils/Real2x2.h"
23#include "arcane/utils/Real3.h"
24#include "arcane/utils/Real3x3.h"
25#include "arcane/utils/HPReal.h"
26#include "arcane/utils/NullThreadMng.h"
27#include "arcane/utils/ArgumentException.h"
29#include "arcane/core/IIOMng.h"
30#include "arcane/core/ISubDomain.h"
31#include "arcane/core/IApplication.h"
32#include "arcane/core/IParallelDispatch.h"
33#include "arcane/core/ParallelMngDispatcher.h"
34#include "arcane/core/ItemGroup.h"
35#include "arcane/core/IMesh.h"
36#include "arcane/core/IItemFamily.h"
37#include "arcane/core/MeshVariable.h"
38#include "arcane/core/Timer.h"
39#include "arcane/core/FactoryService.h"
40#include "arcane/core/AbstractService.h"
41#include "arcane/core/ISerializer.h"
42#include "arcane/core/internal/SerializeMessage.h"
43#include "arcane/core/internal/ParallelMngInternal.h"
44#include "arcane/core/internal/MachineShMemWinMemoryAllocator.h"
46#include "arcane/parallel/IStat.h"
48#include "arcane/impl/TimerMng.h"
49#include "arcane/impl/GetVariablesValuesParallelOperation.h"
50#include "arcane/impl/ParallelExchanger.h"
51#include "arcane/impl/ParallelTopology.h"
52#include "arcane/impl/ParallelReplication.h"
53#include "arcane/impl/SequentialParallelSuperMng.h"
54#include "arcane/impl/SequentialParallelMng.h"
55#include "arcane/impl/internal/ParallelMngUtilsFactoryBase.h"
56#include "arcane/impl/internal/VariableSynchronizer.h"
58#include "arccore/message_passing/RequestListBase.h"
59#include "arccore/message_passing/internal/SerializeMessageList.h"
60#include "arccore/message_passing/internal/IContigMachineShMemWinBaseInternal.h"
61#include "arccore/message_passing/internal/IMachineShMemWinBaseInternal.h"
82:
public RequestListBase
88 ARCANE_UNUSED(wait_mode);
99class SequentialParallelDispatchT
111 SequentialParallelDispatchT(
ITraceMng* tm)
114 void finalize()
override {}
120 ARCANE_UNUSED(send_buf);
125 ARCANE_UNUSED(send_buf);
130 recv_buf.
copy(send_buf);
134 recv_buf.
copy(send_buf);
139 recv_buf.
copy(send_buf);
144 recv_buf.
copy(send_buf);
149 recv_buf.
copy(send_buf);
154 recv_buf.
copy(send_buf);
158 gatherVariable(send_buf, recv_buf, 0);
162 gatherVariable(send_buf, recv_buf, 0);
167 recv_buf.resize(send_buf.
size());
174 recv_buf.resize(send_buf.
size());
180 ARCANE_UNUSED(count);
181 recv_buf.
copy(send_buf);
185 ARCANE_UNUSED(count);
186 recv_buf.
copy(send_buf);
195 ARCANE_UNUSED(send_count);
196 ARCANE_UNUSED(recv_count);
197 ARCANE_UNUSED(send_index);
198 ARCANE_UNUSED(recv_index);
199 recv_buf.
copy(send_buf);
208 ARCANE_UNUSED(send_count);
209 ARCANE_UNUSED(recv_count);
210 ARCANE_UNUSED(send_index);
211 ARCANE_UNUSED(recv_index);
212 recv_buf.
copy(send_buf);
220 ARCANE_UNUSED(send_buffer);
226 Request send(
Span<const Type> send_buffer,
const PointToPointMessageInfo& message)
override
228 ARCANE_UNUSED(send_buffer);
235 return receive(
Span<Type>(recv_buffer), rank, is_blocked);
239 ARCANE_UNUSED(send_buffer);
245 ARCANE_UNUSED(recv_buffer);
249 Request receive(
Span<Type> recv_buffer,
Int32 rank,
bool is_blocked)
override
251 ARCANE_UNUSED(recv_buffer);
257 Request receive(
Span<Type> recv_buffer,
const PointToPointMessageInfo& message)
override
259 ARCANE_UNUSED(recv_buffer);
267 recv_buffer.
copy(send_buffer);
269 Type allReduce(eReduceType op,
Type v)
override
277 ARCANE_UNUSED(send_buf);
279 void allReduce(eReduceType op,
Span<Type> send_buf)
override
282 ARCANE_UNUSED(send_buf);
287 ARCANE_UNUSED(send_buf);
288 ARCANE_UNUSED(recv_buf);
293 recv_buf.
copy(send_buf);
298 ARCANE_UNUSED(send_buf);
305 recv_buf.
copy(send_buf);
310 ARCANE_UNUSED(count);
311 recv_buf.
copy(send_buf);
318 ARCANE_UNUSED(send_count);
319 ARCANE_UNUSED(recv_count);
320 ARCANE_UNUSED(send_index);
321 ARCANE_UNUSED(recv_index);
322 recv_buf.
copy(send_buf);
325 Type scan(eReduceType op,
Type v)
override
333 ARCANE_UNUSED(send_buf);
335 void computeMinMaxSum(
Type val,
Type& min_val,
Type& max_val,
Type& sum_val,
337 Int32& max_rank)
override
339 min_val = max_val = sum_val = val;
340 min_rank = max_rank = 0;
350 for (
Integer i = 0; i < n; ++i) {
351 min_values[i] = max_values[i] = sum_values[i] = values[i];
352 min_ranks[i] = max_ranks[i] = 0;
361class SequentialContigMachineShMemWinBaseInternal
366 SequentialContigMachineShMemWinBaseInternal(
Int64 sizeof_segment,
Int32 sizeof_type)
367 : m_sizeof_segment(sizeof_segment)
368 , m_max_sizeof_segment(sizeof_segment)
369 , m_sizeof_type(sizeof_type)
370 , m_segment(sizeof_segment)
373 ~SequentialContigMachineShMemWinBaseInternal()
override =
default;
379 return m_sizeof_type;
384 return m_segment.span().
subSpan(0, m_sizeof_segment);
389 ARCANE_FATAL(
"Rank {0} is unavailable (Sequential)", rank);
391 return m_segment.span().
subSpan(0, m_sizeof_segment);
395 return m_segment.span().
subSpan(0, m_sizeof_segment);
400 return m_segment.constSpan().
subSpan(0, m_sizeof_segment);
405 ARCANE_FATAL(
"Rank {0} is unavailable (Sequential)", rank);
407 return m_segment.constSpan().
subSpan(0, m_sizeof_segment);
411 return m_segment.constSpan().
subSpan(0, m_sizeof_segment);
416 if (new_sizeof_segment > m_max_sizeof_segment) {
417 ARCANE_FATAL(
"New size of window (sum of size of all segments) is superior than the old size");
419 m_sizeof_segment = new_sizeof_segment;
431 Int64 m_sizeof_segment = 0;
432 Int64 m_max_sizeof_segment = 0;
434 Int32 m_sizeof_type = 0;
442class SequentialMachineShMemWinBaseInternal
447 SequentialMachineShMemWinBaseInternal(
Int64 sizeof_segment,
Int32 sizeof_type)
448 : m_sizeof_type(sizeof_type)
449 , m_segment(sizeof_segment)
451 ~SequentialMachineShMemWinBaseInternal()
override =
default;
457 return m_sizeof_type;
472 ARCANE_FATAL(
"Rank {0} is unavailable (Sequential)", rank);
483 ARCANE_FATAL(
"Rank {0} is unavailable (Sequential)", rank);
489 if (elem.
size() % m_sizeof_type != 0) {
492 m_segment.addRange(elem);
498 ARCANE_FATAL(
"Rank {0} is unavailable (Sequential)", rank);
500 if (elem.
size() % m_sizeof_type != 0) {
503 m_segment.addRange(elem);
509 m_segment.reserve(new_capacity);
514 m_segment.resize(new_size);
543 return makeRef(createNullVariableSynchronizer(pm, family->
allItems()));
547 return makeRef(createNullVariableSynchronizer(pm, group));
560class SequentialParallelMng
561:
public ParallelMngDispatcher
574 ~SequentialParallelMng();
584 void setBaseObject(
IBase* m);
599 recv_serializer->
copy(send_serializer);
603 ARCANE_UNUSED(values);
608 ARCANE_UNUSED(values);
610 ARCANE_UNUSED(bytes);
620 ARCANE_UNUSED(values);
629 void broadcastString(
String& str,
Int32 rank)
override
636 ARCANE_UNUSED(bytes);
641 ARCANE_UNUSED(values);
646 ARCANE_UNUSED(message);
651 ARCANE_UNUSED(message);
656 ARCANE_UNUSED(values);
657 ARCANE_UNUSED(message);
662 ARCANE_UNUSED(values);
663 ARCANE_UNUSED(message);
669 ARCANE_UNUSED(messages);
673 ARCANE_UNUSED(requests);
684 ARCANE_UNUSED(requests);
690 ARCANE_UNUSED(requests);
702 Real reduceRank(
eReduceType rt, Real v, Int32* rank)
723 return createNullVariableSynchronizer(
this, family->
allItems());
727 return createNullVariableSynchronizer(
this, group);
738 return m_replication;
743 delete m_replication;
755 return m_utils_factory;
763 void build()
override;
790 ARCANE_UNUSED(kept_ranks);
791 SequentialParallelMngBuildInfo bi(m_timer_mng, m_world_parallel_mng);
792 bi.setThreadMng(m_thread_mng);
793 bi.setTraceMng(m_trace.get());
794 bi.setCommunicator(m_communicator);
800 ReferenceCounter<ITraceMng> m_trace;
801 IThreadMng* m_thread_mng =
nullptr;
802 ITimerMng* m_timer_mng =
nullptr;
803 IParallelMng* m_world_parallel_mng =
nullptr;
805 Parallel::IStat* m_stat;
806 IParallelReplication* m_replication;
807 MP::Communicator m_communicator;
808 Ref<IParallelMngUtilsFactory> m_utils_factory;
809 IParallelMngInternal* m_parallel_mng_internal =
nullptr;
824 return SequentialParallelMng::create(bi);
829 return SequentialParallelMng::createRef(bi);
836:
public ParallelMngInternal
840 explicit Impl(SequentialParallelMng* pm)
841 : ParallelMngInternal(pm)
845 ~Impl()
override =
default;
875 return { 1, &m_rank };
882 const Int32 m_rank = 0;
888SequentialParallelMng::
891, m_trace(bi.traceMng())
892, m_thread_mng(bi.threadMng())
893, m_timer_mng(bi.m_timer_mng)
894, m_world_parallel_mng(bi.m_world_parallel_mng)
898, m_communicator(bi.communicator())
900, m_parallel_mng_internal(new Impl(this))
902 ARCANE_CHECK_PTR(m_trace);
903 ARCANE_CHECK_PTR(m_thread_mng);
904 if (!m_world_parallel_mng)
905 m_world_parallel_mng =
this;
907 _messagePassingMng()->setCommunicator(m_communicator);
913SequentialParallelMng::
914~SequentialParallelMng()
916 delete m_parallel_mng_internal;
918 delete m_replication;
925void SequentialParallelMng::
926setBaseObject(IBase* sd)
937 class DispatchCreator
941 DispatchCreator(ITraceMng* tm)
947 template <
typename DataType> SequentialParallelDispatchT<DataType>*
950 return new SequentialParallelDispatchT<DataType>(m_tm);
959 m_io_mng = arcaneCreateIOMng(
this);
960 DispatchCreator creator(m_trace.get());
961 this->createDispatchers(creator);
980SequentialParallelSuperMng::
983, m_application(sbi.application())
985, m_timer_mng(nullptr)
993SequentialParallelSuperMng::
996, m_application(sbi.application())
998, m_timer_mng(nullptr)
999, m_communicator(comm)
1007SequentialParallelSuperMng::
1008~SequentialParallelSuperMng()
1010 delete m_thread_mng;
1025 _setDispatchers(c, i32, i64, r);
1036 m_timer_mng = m_owned_timer_mng.get();
1046 if (local_rank != 0)
1053 return SequentialParallelMng::createRef(bi);
1073class SequentialParallelMngBuilder
1079 : m_application(app)
1082 , m_communicator(comm)
1084 ~SequentialParallelMngBuilder()
override
1087 delete m_thread_mng;
1109 if (local_rank != 0)
1114 bi.setThreadMng(m_thread_mng);
1115 bi.setCommunicator(m_communicator);
1116 return arcaneCreateSequentialParallelMngRef(bi);
1122class SequentialParallelMngContainerFactory
1138 ARCANE_UNUSED(nb_rank);
1139 ARCANE_UNUSED(machine_comm);
#define ARCANE_THROW(exception_class,...)
Macro for throwing an exception with formatting.
#define ARCANE_FATAL(...)
Macro throwing a FatalErrorException.
#define ARCCORE_FATAL(...)
Macro throwing a FatalErrorException.
#define ARCANE_SERVICE_INTERFACE(ainterface)
Macro to declare an interface when registering a service.
#define ARCANE_REGISTER_APPLICATION_FACTORY(aclass, ainterface, aname)
Registers a factory service for the class aclass.
AbstractService(const ServiceBuildInfo &)
Constructor from a ServiceBuildInfo.
Exception when an argument is invalid.
Modifiable view of an array of type T.
void copy(const U ©_array)
Copies the array copy_array into the instance.
constexpr Integer size() const noexcept
Returns the size of the array.
Base class for 1D data vectors.
Constant view of an array of type T.
constexpr Integer size() const noexcept
Number of elements in the array.
Operations to access variable values from another subdomain.
Interface of the base class for main arcane objects.
virtual ITraceMng * traceMng() const =0
Trace manager.
Operations to access variable values from another subdomain.
Interface of the input/output manager.
Interface of an entity family.
virtual ItemGroup allItems() const =0
Group of all entities.
Parallel message handling for the type Type.
Information exchange between processors.
Interface for an 'IParallelMng' container factory.
Internal part of IParallelMng.
Interface of a factory for the utility functions of IParallelMng.
Interface of the parallelism manager for a subdomain.
virtual char reduce(eReduceType rt, char v)=0
Performs a reduction of type rt on the real v and returns the value.
Interface for non-blocking collective parallel operations.
Brief information on parallel subdomain replication.
Abstract class of the parallelism supervisor.
Information on the computing core allocation topology.
virtual void copy(const ISerializer *from)=0
Copies the data from from into this instance.
Interface of a thread manager.
Interface of a timer manager.
virtual TraceMessage info()=0
Stream for an information message.
Sends values across different processors.
Interface of a variable synchronization service.
Options to configure allocations.
Communicator for message exchange.
Class allowing the creation of a memory window for a node of computation.
Class allowing the creation of memory windows for a computing node.
Interface for a serialization message list.
Interface for a serialization message between IMessagePassingMng.
Parallel message handling for the type Type.
Information about the source of a message.
Information for sending/receiving a point-to-point message.
bool isBlocking() const
Indicates if the message is blocking.
Base class of a request list.
Serialization message list.
Exception when a function is not implemented.
Exception when an operation is not supported.
Thread manager in single-threaded mode.
Information exchange between processors.
Redirects the message management of sub-domains according to the argument type.
IMessagePassingMng * messagePassingMng() const override
Associated Arccore message passing manager.
Base class of a factory for IParallelMng utility functions.
Brief information on parallel subdomain replication.
Information on the topology for allocating computing cores.
virtual void initialize()
Initializes the instance. This operation is collective.
Statistics on parallelism.
Reference to an instance.
Span< std::byte > segmentView() override
Method allowing the retrieval of a view of its segment.
Int32 sizeofOneElem() const override
Method allowing the retrieval of the size of an element in the window.
void resizeSegment(const Int64 new_sizeof_segment) override
Method allowing the resizing of the window segments.
Span< const std::byte > windowConstView() const override
Method allowing the retrieval of a view of the entire window.
Span< const std::byte > segmentConstView() const override
Method allowing the retrieval of a view of its segment.
ConstArrayView< Int32 > machineRanks() const override
Method allowing the retrieval of the ranks that possess a segment in the window.
Span< std::byte > segmentView(const Int32 rank) override
Method allowing the retrieval of a view of the segment of another subdomain of the node.
void barrier() const override
Method allowing waiting until all processes/threads of the node call this method to continue executio...
Span< const std::byte > segmentConstView(const Int32 rank) const override
Method allowing the retrieval of a view of the segment of another subdomain of the node.
Span< std::byte > windowView() override
Method allowing the retrieval of a view of the entire window.
Span< const std::byte > segmentConstView() const override
Method to get a view of our segment.
Span< const std::byte > segmentConstView(Int32 rank) const override
Method to get a view of the segment of another subdomain of the node.
void addToAnotherSegment(Int32 rank, Span< const std::byte > elem) override
Method to add elements into the segment of another subdomain.
void barrier() const override
Method to wait until all processes/threads of the node call this method to continue execution.
void addToAnotherSegment() override
ConstArrayView< Int32 > machineRanks() const override
Method to get the ranks that possess a segment in the window.
void shrink() override
Method to reduce the reserved memory space for the segments to the minimum necessary.
void add(Span< const std::byte > elem) override
Method to add elements into our segment.
Span< std::byte > segmentView() override
Method to get a view of our segment.
void reserve(Int64 new_capacity) override
Method to reserve memory space in our segment.
Int32 sizeofOneElem() const override
Method to get the size of an element in the window.
Span< std::byte > segmentView(Int32 rank) override
Method to get a view of the segment of another subdomain of the node.
void resize(Int64 new_size) override
Method to resize our segment.
Message interface for type Type.
Ref< IParallelMng > _createParallelMng(Int32 local_rank, ITraceMng *tm) override
Creates the IParallelMng for the local rank local_rank.
Ref< IParallelMngContainer > _createParallelMngBuilder(Int32 nb_rank, Parallel::Communicator comm, Parallel::Communicator machine_comm) override
Creates a container for nb_local_rank local ranks and with communicator as the communicator.
Ref< ITransferValuesParallelOperation > createTransferValuesOperation(IParallelMng *) override
Returns an operation to transfer values between ranks.
Ref< IVariableSynchronizer > createSynchronizer(IParallelMng *pm, const ItemGroup &group) override
Returns an interface to synchronize variables on the group group.
Ref< IVariableSynchronizer > createSynchronizer(IParallelMng *pm, IItemFamily *family) override
Returns an interface to synchronize variables on the group of the family family.
Ref< IMachineShMemWinBaseInternal > createMachineShMemWinBase(Int64 sizeof_segment, Int32 sizeof_type) override
Method allowing the creation of a dynamic memory window on the node.
Ref< IContigMachineShMemWinBaseInternal > createContigMachineShMemWinBase(Int64 sizeof_segment, Int32 sizeof_type) override
Method allowing the creation of a memory window on the node.
ConstArrayView< Int32 > machineRanks() override
Method allowing retrieval of the ranks of the sub-domains of the computing node.
void machineBarrier() override
Method allowing a barrier for the sub-domains of the computing node.
Int32 masterParallelIORank() const override
void initializeWindowCreator() override
Method allowing the initialization of the windowCreator specific to the implementation.
bool isMachineShMemWinAvailable() override
Method allowing to know if shared memory mode is supported.
Int32 nbSendersToMasterParallelIO() const override
MemoryAllocationOptions machineShMemWinMemoryAllocator() override
Method allowing retrieval of a shared memory allocator.
Sequential mode parallelism manager.
Parallel::Communicator communicator() const override
MPI communicator associated with this manager.
ISerializeMessage * createReceiveSerializer(Int32 rank) override
Creates a non-blocking message to receive serialized data from rank rank.
IParallelNonBlockingCollective * nonBlockingCollective() const override
Interface for non-blocking collective operations.
ITransferValuesParallelOperation * createTransferValuesOperation() override
Returns an operation to transfer values between subdomains.
IThreadMng * threadMng() const override
Thread manager.
UniqueArray< Integer > testSomeRequests(ArrayView< Request > requests) override
Tests if one of the rvalues requests is complete.
Int32 commRank() const override
Rank of this instance in the communicator.
ISerializeMessage * createSendSerializer(Int32 rank) override
Creates a non-blocking message to send serialized data to rank rank.
Int32 commSize() const override
Number of instances in the communicator.
IParallelMng * sequentialParallelMng() override
Returns a sequential parallelism manager.
void build() override
Constructs the instance.
void barrier() override
Performs a barrier.
void allGather(ISerializer *send_serializer, ISerializer *recv_serializer) override
Redefines allGather here to avoid hiding the symbol in derived classes.
Parallel::Communicator machineCommunicator() const override
MPI communicator derived from the communicator communicator() gathering all processes of the compute ...
IGetVariablesValuesParallelOperation * createGetVariablesValuesOperation() override
Returns an operation to retrieve the values of a variable on the entities of another subdomain.
IParallelReplication * replication() const override
Replication information.
ITimerMng * timerMng() const override
Timer manager.
MessageId probe(const PointToPointMessageInfo &message) override
Probes if messages are available.
Ref< IParallelMngUtilsFactory > _internalUtilsFactory() const override
Factory for utility functions.
MessageSourceInfo legacyProbe(const PointToPointMessageInfo &message) override
Probes if messages are available.
void processMessages(ConstArrayView< ISerializeMessage * > messages) override
Executes the operations of messages messages.
bool isMasterIO() const override
true if the instance is a master I/O manager.
bool isThreadImplementation() const override
Indicates if the implementation uses threads.
Ref< IRequestList > createRequestListRef() override
Creates a request list for this manager.
Parallel::IStat * stat() override
Statistics manager.
void printStats() override
Prints statistics related to this parallelism manager.
ITraceMng * traceMng() const override
Trace manager.
void initialize() override
Initializes the parallelism manager.
IParallelMng * worldParallelMng() const override
Parallelism manager over all allocated resources.
bool isHybridImplementation() const override
Indicates if the implementation uses hybrid mode.
IParallelTopology * createTopology() override
Creates an instance containing information about the rank topology of this manager.
bool isParallel() const override
Returns true if the execution is parallel.
void setReplication(IParallelReplication *v) override
Sets the Replication Information.
void freeRequests(ArrayView< Parallel::Request > requests) override
Frees the requests.
void waitAllRequests(ArrayView< Request > requests) override
Blocks while waiting for the rvalues requests to complete.
UniqueArray< Integer > waitSomeRequests(ArrayView< Request > requests) override
Blocks while waiting for one of the rvalues requests to complete.
IParallelMngInternal * _internalApi() override
Internal Arcane API.
void broadcastMemoryBuffer(ByteArray &bytes, Int32 rank) override
Performs a broadcast of a memory region.
IVariableSynchronizer * createSynchronizer(const ItemGroup &group) override
Returns an interface for synchronizing variables on the group.
IIOMng * ioMng() const override
I/O manager.
Int32 masterIORank() const override
Rank of the instance managing I/O (for which isMasterIO() is true).
IVariableSynchronizer * createSynchronizer(IItemFamily *family) override
Returns an interface for synchronizing variables on the group of the family.
IParallelExchanger * createExchanger() override
Returns an interface for transferring messages between processors.
Request sendSerializer(ISerializer *values, Int32 rank, ByteArray &bytes) override
void * getMPICommunicator() override
Address of the MPI communicator associated with this manager.
Sequential parallelism supervisor.
void initialize() override
Initializes the instance.
Ref< IParallelMng > internalCreateWorldParallelMng(Int32 local_rank) override
Creates a parallelism manager for all allocated cores.
MP::Communicator communicator() const override
MPI communicator associated with this manager.
void tryAbort() override
Attempts to abort.
void build() override
Build-level construction of the service.
IApplication * m_application
Associated supervisor.
IThreadMng * threadMng() const override
Thread manager.
void _wait(Parallel::eWaitType wait_mode)
Performs the wait or test.
Message using a SerializeBuffer.
IApplication * application() const
Access to the associated IApplication.
Structure containing the information to create a service.
Service creation properties.
__host__ __device__ void copy(const U ©_array)
Copies the array copy_array into the instance.
constexpr __host__ __device__ SizeType size() const noexcept
Returns the size of the array.
View of an array of elements of type T.
constexpr __host__ __device__ Span< T, DynExtent > subSpan(Int64 abegin, Int64 asize) const
Sub-view starting from element abegin and containing asize elements.
Unicode character string.
TraceAccessor(ITraceMng *m)
Constructs an accessor via the trace manager m.
ITraceMng * traceMng() const
Trace manager.
1D data vector with value semantics (STL style).
#define ARCANE_REGISTER_SERVICE(aclass, a_service_property,...)
Macro for registering a service.
Declarations of types and methods used by message exchange mechanisms.
eReduceType
Supported reduction types.
IStat * createDefaultStat()
Creates a default instance.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Ref< TrueType > createRef(Args &&... args)
Creates an instance of type TrueType with arguments Args and returns a reference to it.
std::int64_t Int64
Signed integer type of 64 bits.
Int32 Integer
Type representing an integer.
Array< Byte > ByteArray
Dynamic one-dimensional array of characters.
ConstArrayView< Int32 > Int32ConstArrayView
C equivalent of a 1D array of 32-bit integers.
@ ST_Application
The service is used at the application level.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Creates a reference on a pointer.
std::int32_t Int32
Signed integer type of 32 bits.
Information to construct a SequentialParallelMng.