Arcane  v4.1.0.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 "arccore/base/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.
Vue modifiable sur une zone mémoire contigue contenant des éléments de taille fixe.
ConstMemoryView makeMemoryView(Span< DataType > v)
Créé une vue mémoire constante à partir d'un Span.
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.