7#include <gtest/gtest.h>
9#include "arccore/message_passing_mpi/StandaloneMpiMessagePassingMng.h"
11#include "arccore/base/BFloat16.h"
12#include "arccore/base/Float16.h"
13#include "arccore/collections/Array.h"
15#include "arccore/message_passing/Communicator.h"
16#include "arccore/serialize/ISerializer.h"
24using namespace Arccore::MessagePassing::Mpi;
29TEST(MessagePassingMpi, Simple)
32 std::cout <<
"Rank=" << pm->commRank() <<
"\n";
33 if (pm->commSize() == 2) {
35 if (pm->commRank() == 0)
36 mpSend(pm.get(), send_buf, 1);
40 ASSERT_EQ(receive_buf.size(), 3);
41 ASSERT_EQ(receive_buf[0], 1);
42 ASSERT_EQ(receive_buf[1], 7);
43 ASSERT_EQ(receive_buf[2], -4);
49 std::cout <<
"Communicator=" << comm <<
"\n";
55TEST(MessagePassingMpi, SerializeGather)
60 ASSERT_EQ(pm->commSize(), 3);
61 Int32 my_rank = pm->commRank();
69 send_serializer->setMode(ISerializer::ModeReserve);
70 send_serializer->reserveArray(send_buf[my_rank]);
71 send_serializer->allocateBuffer();
73 send_serializer->putArray(send_buf[my_rank]);
76 mpAllGather(pm.get(), send_serializer.get(), receive_serializer.get());
79 receive_serializer->getArray(receive_buf[0]);
80 receive_serializer->getArray(receive_buf[1]);
81 receive_serializer->getArray(receive_buf[2]);
85 ASSERT_EQ(send_buf[0], receive_buf[0]);
86 ASSERT_EQ(send_buf[1], receive_buf[1]);
87 ASSERT_EQ(send_buf[2], receive_buf[2]);
96template <
typename DataType>
109 ASSERT_EQ(send_buf, receive_buf);
115 DataType expected_sum(0.0f);
116 for (Int32 i = 0; i < nb_rank; ++i) {
117 values[i] = (
static_cast<float>(i) - 1.2f) * 3.4f;
118 expected_sum = expected_sum + values[i];
120 DataType expected_min = values[0];
121 DataType expected_max = values[nb_rank - 1];
122 DataType my_value(values[my_rank]);
124 std::cout <<
"Sum=" << sum_result <<
"\n";
125 ASSERT_EQ(expected_sum, sum_result);
128 std::cout <<
"Max=" << max_result <<
"\n";
129 ASSERT_EQ(expected_max, max_result);
132 std::cout <<
"Min=" << min_result <<
"\n";
133 ASSERT_EQ(expected_min, min_result);
139TEST(MessagePassingMpi,
Float16)
144 _doTestFloat16<Float16>(pm.get());
145 _doTestFloat16<BFloat16>(pm.get());
#define ASSERT_TRUE(condition)
Vérifie que condition est vrai.
Liste des fonctions d'échange de message.
Gestion des références à une classe C++.
Integer size() const
Nombre d'éléments du vecteur.
Communicateur pour l'échange de message.
Interface du gestionnaire des échanges de messages.
virtual Int32 commRank() const =0
Rang de cette instance dans le communicateur.
virtual Int32 commSize() const =0
Nombre d'instance dans le communicateur.
Référence à une instance.
Vecteur 1D de données avec sémantique par valeur (style STL).
@ ModePut
Le sérialiseur attend des reserve()
@ ModeGet
Le sérialiseur attend des get()
static Ref< IMessagePassingMng > createRef(MPI_Comm comm, bool clean_comm=false)
Créé un gestionnaire associé au communicateur comm.
@ ReduceSum
Somme des valeurs.
@ ReduceMin
Minimum des valeurs.
@ ReduceMax
Maximum des valeurs.
Espace de nommage contenant les types et déclarations qui gèrent le mécanisme de parallélisme par éch...
C char mpAllReduce(IMessagePassingMng *pm, eReduceType rt, char v)
void mpAllGather(IMessagePassingMng *pm, const ISerializer *send_serializer, ISerializer *recv_serializer)
Message allGather() pour une sérialisation.
Request mpReceive(IMessagePassingMng *pm, ISerializer *values, const PointToPointMessageInfo &message)
Message de réception utilisant un ISerializer.
Request mpSend(IMessagePassingMng *pm, const ISerializer *values, const PointToPointMessageInfo &message)
Message d'envoi utilisant un ISerializer.
Espace de nom de Arccore.
Arcane::Float16 Float16
Type 'Float16' (binary16)
ARCCORE_SERIALIZE_EXPORT Ref< ISerializer > createSerializer()
Créé une instance de ISerializer.