Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Réductions

Arcane permet d'effectuer sur accélérateur les trois types classiques de réduction (Min, Max et Somme). Il existe deux possibilités pour effectuer des réductions :

Réductions via une boucle

Les classes ReducerMax2, ReducerMin2 et ReducerSum2 permettent d'effectuer des réductions sur accélérateurs. Elles s'utilisent à l'intérieur des boucles telles que RUNCOMMAND_LOOP1() ou RUNCOMMAND_ENUMERATE() ou RUNCOMMAND_MAT_ENUMERATE().

Il faut d'abord déclarer un instance d'une des classes de réduction pui la passer en paramètre supplémentaires des boucles. Par exemple :

{
auto command = makeCommand(queue);
Arcane::Accelerator::ReducerMin2<double> minimum_reducer(command);
Arcane::VariableCellReal my_variable = ...;
auto in_my_variable = viewIn(command,my_variable);
command << RUNCOMMAND_ENUMERATE(Cell,cid,allCells(),minimum_reducer)
{
minimum_reducer.combine(in_my_variable[cid]);
};
info() << "MinValue=" << minimum_reducer.reducedValue();
}
Types et fonctions pour gérer les synchronisations sur les accélérateurs.
Types et macros pour gérer les énumérations des entités sur les accélérateurs.
#define RUNCOMMAND_ENUMERATE(ItemTypeName, iter_name, item_group,...)
Macro pour itérer sur accélérateur sur un groupe d'entités.
File d'exécution pour un accélérateur.
Avertissement
Chaque instance ne peut être utilisée qu'une seule fois.

Il est possible d'utiliser plusieurs instances de réduction si on souhaite réaliser plusieurs réductions à la fois. Par exemple:

{
auto command = makeCommand(queue);
Arcane::Accelerator::ReducerMin2<double> minimum_reducer(command);
Arcane::Accelerator::ReducerMax2<double> maximum_reducer(command);
Arcane::VariableCellReal my_variable = ...;
auto in_my_variable = viewIn(command,my_variable);
command << RUNCOMMAND_ENUMERATE(Cell,cid,allCells(),minimum_reducer,maximum_reducer)
{
minimum_reducer.combine(in_my_variable[cid]);
maximum_reducer.combine(in_my_variable[cid]);
};
info() << "MinValue=" << minimum_reducer.reducedValue();
info() << "MaxValue=" << maximum_reducer.reducedValue();
}

Réductions directes

La classe GenericReducer permet de lancer une commande spécifique dédiée à la réduction. Une instance de GenericReducer peut être utilisée plusieurs fois.