Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Référence du modèle de la classe Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >

Opérateur de réduction. Plus de détails...

#include <arcane/accelerator/Reduce.h>

Fonctions membres publiques

 HostDeviceReducerBase (RunCommand &command)
 
__host__ __device__ HostDeviceReducerBase (const HostDeviceReducerBase &rhs)
 
__host__ __device__ HostDeviceReducerBase (HostDeviceReducerBase &&rhs)=delete
 
HostDeviceReducerBaseoperator= (const HostDeviceReducerBase &rhs)=delete
 
__host__ __device__ void setValue (DataType v)
 
__host__ __device__ DataType localValue () const
 

Fonctions membres protégées

DataType _reduce ()
 Effectue la réduction et récupère la valeur. ATTENTION: ne faire qu'une seule fois.
 
__host__ __device__ void _finalize ()
 

Attributs protégés

impl::IReduceMemoryImplm_memory_impl = nullptr
 
DataType * m_host_or_device_memory_for_reduced_value = nullptr
 Pointeur vers la donnée qui contiendra la valeur réduite.
 
impl::IReduceMemoryImpl::GridMemoryInfo m_grid_memory_info
 
DataType m_local_value
 
DataType * m_atomic_parent_value = nullptr
 
DataType m_atomic_value
 

Description détaillée

template<typename DataType, typename ReduceFunctor>
class Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >

Opérateur de réduction.

Cette classe permet de gérer une réduction sur accélérateur ou en multi-thread.

La réduction finale a lieu lors de l'appel à reduce(). Il ne faut donc faire cet appel qu'une seule fois et dans une partie collective. Cet appel n'est valide que sur les instance créées avec un constructeur vide. Ces dernières ne peuvent être créées que sur l'hôte.

Avertissement
Le constructeur de recopie ne doit pas être appelé explicitement. L'instance de départ doit rester valide tant qu'il existe des copies ou des références dans le noyau de calcul.

NOTE sur l'implémentation

Sur GPU, les réductions sont effectuées dans le destructeur de la classe La valeur 'm_host_or_device_memory_for_reduced_value' sert à conserver ces valeurs. Sur l'hôte, on utilise un 'std::atomic' pour conserver la valeur commune entre les threads. Cette valeur est référencée par 'm_parent_value' et n'est valide que sur l'hôte.

Définition à la ligne 297 du fichier Reduce.h.

Documentation des constructeurs et destructeur

◆ HostDeviceReducerBase() [1/2]

template<typename DataType, typename ReduceFunctor>
Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::HostDeviceReducerBase ( RunCommand & command)
inline

Définition à la ligne 301 du fichier Reduce.h.

◆ HostDeviceReducerBase() [2/2]

template<typename DataType, typename ReduceFunctor>
__host__ __device__ Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::HostDeviceReducerBase ( const HostDeviceReducerBase< DataType, ReduceFunctor > & rhs)
inline

Définition à la ligne 322 du fichier Reduce.h.

Documentation des fonctions membres

◆ _finalize()

template<typename DataType, typename ReduceFunctor>
__host__ __device__ void Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::_finalize ( )
inlineprotected

Définition à la ligne 425 du fichier Reduce.h.

◆ _reduce()

template<typename DataType, typename ReduceFunctor>
DataType Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::_reduce ( )
inlineprotected

Effectue la réduction et récupère la valeur. ATTENTION: ne faire qu'une seule fois.

Définition à la ligne 394 du fichier Reduce.h.

Références ARCANE_FATAL, et m_host_or_device_memory_for_reduced_value.

◆ localValue()

template<typename DataType, typename ReduceFunctor>
__host__ __device__ DataType Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::localValue ( ) const
inline

Définition à la ligne 358 du fichier Reduce.h.

◆ setValue()

template<typename DataType, typename ReduceFunctor>
__host__ __device__ void Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::setValue ( DataType v)
inline

Définition à la ligne 354 du fichier Reduce.h.

Documentation des données membres

◆ m_atomic_parent_value

template<typename DataType, typename ReduceFunctor>
DataType* Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::m_atomic_parent_value = nullptr
protected

Définition à la ligne 382 du fichier Reduce.h.

◆ m_atomic_value

template<typename DataType, typename ReduceFunctor>
DataType Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::m_atomic_value
mutableprotected

Définition à la ligne 383 du fichier Reduce.h.

◆ m_grid_memory_info

template<typename DataType, typename ReduceFunctor>
impl::IReduceMemoryImpl::GridMemoryInfo Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::m_grid_memory_info
protected

Définition à la ligne 373 du fichier Reduce.h.

◆ m_host_or_device_memory_for_reduced_value

template<typename DataType, typename ReduceFunctor>
DataType* Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::m_host_or_device_memory_for_reduced_value = nullptr
protected

Pointeur vers la donnée qui contiendra la valeur réduite.

Sur accélérateur, cette donnée est allouée sur le device. Sur CPU, il s'agit de l'adresse de m_local_value pour l'instance parente.

Définition à la ligne 372 du fichier Reduce.h.

Référencé par _reduce().

◆ m_local_value

template<typename DataType, typename ReduceFunctor>
DataType Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::m_local_value
mutableprotected

Définition à la ligne 381 du fichier Reduce.h.

◆ m_memory_impl

template<typename DataType, typename ReduceFunctor>
impl::IReduceMemoryImpl* Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::m_memory_impl = nullptr
protected

Définition à la ligne 365 du fichier Reduce.h.


La documentation de cette classe a été générée à partir du fichier suivant :