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);
282 receive_buf.
copy(send_buf);
284 void allReduce(eReduceType op,
Span<Type> send_buf)
override
287 ARCANE_UNUSED(send_buf);
292 receive_buf.
copy(send_buf);
297 ARCANE_UNUSED(send_buf);
298 ARCANE_UNUSED(recv_buf);
303 recv_buf.
copy(send_buf);
308 ARCANE_UNUSED(send_buf);
315 recv_buf.
copy(send_buf);
320 ARCANE_UNUSED(count);
321 recv_buf.
copy(send_buf);
328 ARCANE_UNUSED(send_count);
329 ARCANE_UNUSED(recv_count);
330 ARCANE_UNUSED(send_index);
331 ARCANE_UNUSED(recv_index);
332 recv_buf.
copy(send_buf);
335 Type scan(eReduceType op,
Type v)
override
343 ARCANE_UNUSED(send_buf);
345 void computeMinMaxSum(
Type val,
Type& min_val,
Type& max_val,
Type& sum_val,
347 Int32& max_rank)
override
349 min_val = max_val = sum_val = val;
350 min_rank = max_rank = 0;
360 for (
Integer i = 0; i < n; ++i) {
361 min_values[i] = max_values[i] = sum_values[i] = values[i];
362 min_ranks[i] = max_ranks[i] = 0;
371class SequentialContigMachineShMemWinBaseInternal
376 SequentialContigMachineShMemWinBaseInternal(
Int64 sizeof_segment,
Int32 sizeof_type)
377 : m_sizeof_segment(sizeof_segment)
378 , m_max_sizeof_segment(sizeof_segment)
379 , m_sizeof_type(sizeof_type)
380 , m_segment(sizeof_segment)
383 ~SequentialContigMachineShMemWinBaseInternal()
override =
default;
389 return m_sizeof_type;
394 return m_segment.span().
subSpan(0, m_sizeof_segment);
399 ARCANE_FATAL(
"Rank {0} is unavailable (Sequential)", rank);
401 return m_segment.span().
subSpan(0, m_sizeof_segment);
405 return m_segment.span().
subSpan(0, m_sizeof_segment);
410 return m_segment.constSpan().
subSpan(0, m_sizeof_segment);
415 ARCANE_FATAL(
"Rank {0} is unavailable (Sequential)", rank);
417 return m_segment.constSpan().
subSpan(0, m_sizeof_segment);
421 return m_segment.constSpan().
subSpan(0, m_sizeof_segment);
426 if (new_sizeof_segment > m_max_sizeof_segment) {
427 ARCANE_FATAL(
"New size of window (sum of size of all segments) is superior than the old size");
429 m_sizeof_segment = new_sizeof_segment;
441 Int64 m_sizeof_segment = 0;
442 Int64 m_max_sizeof_segment = 0;
444 Int32 m_sizeof_type = 0;
452class SequentialMachineShMemWinBaseInternal
457 SequentialMachineShMemWinBaseInternal(
Int64 sizeof_segment,
Int32 sizeof_type)
458 : m_sizeof_type(sizeof_type)
459 , m_segment(sizeof_segment)
461 ~SequentialMachineShMemWinBaseInternal()
override =
default;
467 return m_sizeof_type;
482 ARCANE_FATAL(
"Rank {0} is unavailable (Sequential)", rank);
493 ARCANE_FATAL(
"Rank {0} is unavailable (Sequential)", rank);
499 if (elem.
size() % m_sizeof_type != 0) {
502 m_segment.addRange(elem);
508 ARCANE_FATAL(
"Rank {0} is unavailable (Sequential)", rank);
510 if (elem.
size() % m_sizeof_type != 0) {
513 m_segment.addRange(elem);
519 m_segment.reserve(new_capacity);
524 m_segment.resize(new_size);
553 return makeRef(createNullVariableSynchronizer(pm, family->
allItems()));
557 return makeRef(createNullVariableSynchronizer(pm, group));
570class SequentialParallelMng
571:
public ParallelMngDispatcher
584 ~SequentialParallelMng();
594 void setBaseObject(
IBase* m);
609 recv_serializer->
copy(send_serializer);
613 ARCANE_UNUSED(values);
618 ARCANE_UNUSED(values);
620 ARCANE_UNUSED(bytes);
630 ARCANE_UNUSED(values);
639 void broadcastString(
String& str,
Int32 rank)
override
646 ARCANE_UNUSED(bytes);
651 ARCANE_UNUSED(values);
656 ARCANE_UNUSED(message);
661 ARCANE_UNUSED(message);
666 ARCANE_UNUSED(values);
667 ARCANE_UNUSED(message);
672 ARCANE_UNUSED(values);
673 ARCANE_UNUSED(message);
679 ARCANE_UNUSED(messages);
683 ARCANE_UNUSED(requests);
694 ARCANE_UNUSED(requests);
700 ARCANE_UNUSED(requests);
712 Real reduceRank(
eReduceType rt, Real v, Int32* rank)
733 return createNullVariableSynchronizer(
this, family->
allItems());
737 return createNullVariableSynchronizer(
this, group);
748 return m_replication;
753 delete m_replication;
765 return m_utils_factory;
773 void build()
override;
800 ARCANE_UNUSED(kept_ranks);
801 SequentialParallelMngBuildInfo bi(m_timer_mng, m_world_parallel_mng);
802 bi.setThreadMng(m_thread_mng);
803 bi.setTraceMng(m_trace.get());
804 bi.setCommunicator(m_communicator);
810 ReferenceCounter<ITraceMng> m_trace;
811 IThreadMng* m_thread_mng =
nullptr;
812 ITimerMng* m_timer_mng =
nullptr;
813 IParallelMng* m_world_parallel_mng =
nullptr;
815 Parallel::IStat* m_stat;
816 IParallelReplication* m_replication;
817 MP::Communicator m_communicator;
818 Ref<IParallelMngUtilsFactory> m_utils_factory;
819 IParallelMngInternal* m_parallel_mng_internal =
nullptr;
834 return SequentialParallelMng::create(bi);
839 return SequentialParallelMng::createRef(bi);
846:
public ParallelMngInternal
850 explicit Impl(SequentialParallelMng* pm)
851 : ParallelMngInternal(pm)
855 ~Impl()
override =
default;
885 return { 1, &m_rank };
892 const Int32 m_rank = 0;
898SequentialParallelMng::
901, m_trace(bi.traceMng())
902, m_thread_mng(bi.threadMng())
903, m_timer_mng(bi.m_timer_mng)
904, m_world_parallel_mng(bi.m_world_parallel_mng)
908, m_communicator(bi.communicator())
910, m_parallel_mng_internal(new Impl(this))
912 ARCANE_CHECK_PTR(m_trace);
913 ARCANE_CHECK_PTR(m_thread_mng);
914 if (!m_world_parallel_mng)
915 m_world_parallel_mng =
this;
917 _setCommunicator(m_communicator);
923SequentialParallelMng::
924~SequentialParallelMng()
926 delete m_parallel_mng_internal;
928 delete m_replication;
935void SequentialParallelMng::
936setBaseObject(IBase* sd)
947 class DispatchCreator
951 DispatchCreator(ITraceMng* tm)
957 template <
typename DataType> SequentialParallelDispatchT<DataType>*
960 return new SequentialParallelDispatchT<DataType>(m_tm);
969 m_io_mng = arcaneCreateIOMng(
this);
970 DispatchCreator creator(m_trace.get());
971 this->createDispatchers(creator);
990SequentialParallelSuperMng::
993, m_application(sbi.application())
995, m_timer_mng(nullptr)
1003SequentialParallelSuperMng::
1006, m_application(sbi.application())
1008, m_timer_mng(nullptr)
1009, m_communicator(comm)
1017SequentialParallelSuperMng::
1018~SequentialParallelSuperMng()
1020 delete m_thread_mng;
1035 _setDispatchers(c, i32, i64, r);
1046 m_timer_mng = m_owned_timer_mng.get();
1056 if (local_rank != 0)
1063 return SequentialParallelMng::createRef(bi);
1083class SequentialParallelMngBuilder
1089 : m_application(app)
1092 , m_communicator(comm)
1094 ~SequentialParallelMngBuilder()
override
1097 delete m_thread_mng;
1119 if (local_rank != 0)
1124 bi.setThreadMng(m_thread_mng);
1125 bi.setCommunicator(m_communicator);
1126 return arcaneCreateSequentialParallelMngRef(bi);
1132class SequentialParallelMngContainerFactory
1148 ARCANE_UNUSED(nb_rank);
1149 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 instance.
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.