Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
RequestListBase.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* RequestListBase.cc (C) 2000-2020 */
9/* */
10/* Liste de requêtes MPI. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arccore/message_passing/RequestListBase.h"
15#include "arccore/base/NotImplementedException.h"
16
17/*---------------------------------------------------------------------------*/
18/*---------------------------------------------------------------------------*/
19
20namespace Arccore::MessagePassing::internal
21{
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
27clear()
28{
29 m_requests.clear();
30 m_requests_done.clear();
31 m_done_request_indexes.clear();
32}
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
39{
40 // TODO: optimiser cela en supprimant plusieurs valeurs d'un coup
41 for( Integer i=0, n=m_requests.size(); i<n; ++i ){
42 if (m_requests_done[i]){
43 _removeRequestAtIndex(i);
44 --i;
45 --n;
46 }
47 }
48 m_done_request_indexes.clear();
49}
50
51/*---------------------------------------------------------------------------*/
52/*---------------------------------------------------------------------------*/
53
56{
57 return m_done_request_indexes.view();
58}
59
60/*---------------------------------------------------------------------------*/
61/*---------------------------------------------------------------------------*/
62
64wait(eWaitType wait_type)
65{
66 m_requests_done.fill(false);
67
68 // Délegue l'appel effectif à la classe dérivée qui doit remplir
69 // le champ \a m_requests_done (sauf pour WaitAll)
70 _wait(wait_type);
71
72 if (wait_type==WaitAll)
73 m_requests_done.fill(true);
74
75 Integer nb_request = size();
76 m_done_request_indexes.clear();
77 m_done_request_indexes.reserve(nb_request);
78 Int32 nb_done = 0;
79 for( Integer i=0; i<nb_request; ++i )
80 if (m_requests_done[i]){
81 m_done_request_indexes.add(i);
82 ++nb_done;
83 }
84 return nb_done;
85}
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
89
90} // End namespace Arccore::MessagePassing::internal
91
92/*---------------------------------------------------------------------------*/
93/*---------------------------------------------------------------------------*/
void reserve(Int64 new_capacity)
Réserve le mémoire pour new_capacity éléments.
ArrayView< T > view() const
Vue mutable sur ce tableau.
void fill(ConstReferenceType value)
Remplit le tableau avec la valeur value.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
void clear()
Supprime les éléments du tableau.
Vue constante d'un tableau de type T.
void clear() final
Supprime toutes les requêtes de la liste.
virtual void _wait(eWaitType wait_type)=0
Effectue l'attente ou le test.
Int32 wait(eWaitType wait_type) final
Attend ou test la complétion de une ou plusieurs requêtes.
Int32 size() const override
Nombre de requêtes.
void removeDoneRequests() override
Supprime de la liste les requêtes terminées.
ConstArrayView< Int32 > doneRequestIndexes() const final
Indices dans le tableaux des requêtes des requêtes terminées lors du dernier appel à wait().
Int32 Integer
Type représentant un entier.
std::int32_t Int32
Type entier signé sur 32 bits.