Arcane  v3.16.9.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
core/IReduceMemoryImpl.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* IReduceMemoryImpl.h (C) 2000-2025 */
9/* */
10/* Interface de la gestion mémoire pour les réductions. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_CORE_IREDUCEMEMORYIMPL_H
13#define ARCANE_ACCELERATOR_CORE_IREDUCEMEMORYIMPL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19#include "arcane/utils/MemoryView.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane::Accelerator::impl
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29/*!
30 * \internal
31 * \brief Interface de la gestion mémoire pour les réductions.
32 * \warning API en cours de définition.
33 */
34class ARCANE_ACCELERATOR_CORE_EXPORT IReduceMemoryImpl
35{
36 public:
37
38 //! Informations mémoire pour la réduction sur les accélérateurs
40 {
41 //! Mémoire allouée pour la réduction sur une grille (de taille nb_bloc * sizeof(T))
43 //! Entier utilisé pour compter le nombre de blocs ayant déjà fait leur partie de la réduction
44 unsigned int* m_grid_device_count = nullptr;
45 //! Pointeur vers la mémoire sur l'hôte contenant la valeur réduite.
47 //! Taille d'un warp
49 };
50
51 public:
52
53 virtual ~IReduceMemoryImpl() = default;
54
55 public:
56
57 /*!
58 * \brief Alloue la mémoire pour une donnée dont on veut faire une réduction et
59 * remplit la zone avec la valeur de \a identity_view.
60 */
61 virtual void* allocateReduceDataMemory(ConstMemoryView identity_view) = 0;
62
63 //! Positionne la taille de la grille GPU (le nombre de blocs)
64 virtual void setGridSizeAndAllocate(Int32 grid_size) = 0;
65
66 //! Taille de la grille GPU (nombre de blocs)
67 virtual Int32 gridSize() const = 0;
68
69 //! Informations sur la mémoire utilisée par la réduction
71
72 /*!
73 * \brief Copie la valeur réduite depuis le device vers l'hote.
74 *
75 * La valeur sera copié de gridMemoryInfo().m_device_memory_for_reduced_value
76 * vers gridMemoryInfo().m_host_memory_for_reduced_value
77 */
78 virtual void copyReduceValueFromDevice() =0;
79
80 //! Libère l'instance.
81 virtual void release() = 0;
82};
83
84/*---------------------------------------------------------------------------*/
85/*---------------------------------------------------------------------------*/
86/*!
87 * \brief Alloue la mémoire pour contenir la valeur réduite et positionne
88 * sa valeur à \a identity.
89 */
90template<typename T> T*
91allocateReduceDataMemory(IReduceMemoryImpl* p,T identity)
92{
93 T* ptr = reinterpret_cast<T*>(p->allocateReduceDataMemory(makeMemoryView(&identity)));
94 return ptr;
95}
96
97/*---------------------------------------------------------------------------*/
98/*---------------------------------------------------------------------------*/
99
100} // End namespace Arcane::Accelerator::impl
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104
105#endif
virtual void * allocateReduceDataMemory(ConstMemoryView identity_view)=0
Alloue la mémoire pour une donnée dont on veut faire une réduction et remplit la zone avec la valeur ...
virtual Int32 gridSize() const =0
Taille de la grille GPU (nombre de blocs)
virtual GridMemoryInfo gridMemoryInfo()=0
Informations sur la mémoire utilisée par la réduction.
virtual void copyReduceValueFromDevice()=0
Copie la valeur réduite depuis le device vers l'hote.
virtual void release()=0
Libère l'instance.
virtual void setGridSizeAndAllocate(Int32 grid_size)=0
Positionne la taille de la grille GPU (le nombre de blocs)
Vue constante sur une zone mémoire contigue contenant des éléments de taille fixe.
Definition MemoryView.h:38
Vue modifiable sur une zone mémoire contigue contenant des éléments de taille fixe.
Definition MemoryView.h:156
ConstMemoryView makeMemoryView(Span< DataType > v)
Créé une vue mémoire constante à partir d'un Span.
Definition MemoryView.h:325
std::int32_t Int32
Type entier signé sur 32 bits.
Informations mémoire pour la réduction sur les accélérateurs.
void * m_host_memory_for_reduced_value
Pointeur vers la mémoire sur l'hôte contenant la valeur réduite.
MutableMemoryView m_grid_memory_values
Mémoire allouée pour la réduction sur une grille (de taille nb_bloc * sizeof(T))
unsigned int * m_grid_device_count
Entier utilisé pour compter le nombre de blocs ayant déjà fait leur partie de la réduction.