Opérateur de réduction. Plus de détails...
Fonctions membres publiques | |
HostDeviceReducerBase (RunCommand &command) | |
ARCCORE_HOST_DEVICE | HostDeviceReducerBase (const HostDeviceReducerBase &rhs) |
ARCCORE_HOST_DEVICE | HostDeviceReducerBase (HostDeviceReducerBase &&rhs)=delete |
HostDeviceReducerBase & | operator= (const HostDeviceReducerBase &rhs)=delete |
ARCCORE_HOST_DEVICE void | setValue (DataType v) |
ARCCORE_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. | |
ARCCORE_HOST_DEVICE void | _finalize () |
Attributs protégés | |
impl::IReduceMemoryImpl * | m_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 |
Attributs privés | |
RunCommand * | m_command = nullptr |
DataType | m_identity |
bool | m_is_master_instance = false |
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.
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.
|
inline |
|
inline |
|
inlineprotected |
|
inlineprotected |
Effectue la réduction et récupère la valeur. ATTENTION: ne faire qu'une seule fois.
Définition à la ligne 399 du fichier Reduce.h.
Références ARCANE_FATAL, Arcane::Accelerator::impl::IReduceMemoryImpl::copyReduceValueFromDevice(), Arcane::Accelerator::impl::IReduceMemoryImpl::GridMemoryInfo::m_host_memory_for_reduced_value, Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::m_host_or_device_memory_for_reduced_value, et Arcane::Accelerator::impl::IReduceMemoryImpl::release().
|
inline |
|
inline |
|
protected |
|
mutableprotected |
|
private |
|
protected |
|
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 377 du fichier Reduce.h.
Référencé par Arcane::Accelerator::HostDeviceReducerBase< DataType, ReduceFunctor >::_reduce().
|
private |
|
private |
|
mutableprotected |
|
protected |