8#include <gtest/gtest.h>
10#include "arcane/accelerator/core/Runner.h"
11#include "arcane/accelerator/core/RunQueue.h"
18extern "C++" void arcaneRegisterDefaultAcceleratorRuntime();
28 arcaneRegisterDefaultAcceleratorRuntime();
32 return arcaneGetDefaultExecutionPolicy();
38 std::cout <<
"DO_REDUCE_1\n";
39 Runner runner(_defaultExecutionPolicy());
48 reducer_sum.combine(i + 1);
50 Int64 computed_sum = reducer_sum.reducedValue();
51 std::cout <<
"NB_ITER=" << nb_iter <<
"\n";
52 std::cout <<
"VALUE sum=" << computed_sum
54 Int64 expected_sum = (nb_iter * (nb_iter + 1)) / 2;
55 std::cout <<
"VALUE sum=" << computed_sum
56 <<
" expected=" << expected_sum
58 ASSERT_EQ(computed_sum, expected_sum);
64 std::cout <<
"DO_REDUCE_2\n";
65 Runner runner(_defaultExecutionPolicy());
73 command << ::Arcane::Accelerator::impl::makeExtendedArrayBoundLoop(Arcane::ArrayBounds<MDDim1>(nb_iter),
74 reducer_sum, reducer_max, reducer_min)
78 reducer_sum.combine(i + 1);
79 reducer_min.combine(i + 5);
80 reducer_max.combine(i - 5);
82 Int64 computed_sum = reducer_sum.reducedValue();
83 Int64 computed_min = reducer_min.reducedValue();
84 Int64 computed_max = reducer_max.reducedValue();
85 std::cout <<
"VALUE sum=" << computed_sum
86 <<
" min=" << computed_min
87 <<
" max=" << computed_max
90 Int64 expected_sum = (nb_iter * (nb_iter + 1)) / 2;
92 std::cout <<
"VALUE sum=" << computed_sum
93 <<
" expected=" << expected_sum
95 std::cout <<
"MIN/MAX VALUE min=" << computed_min
96 <<
" max=" << computed_max
99 ASSERT_EQ(computed_sum, expected_sum);
100 ASSERT_EQ(computed_min, 5);
101 ASSERT_EQ(computed_max, (nb_iter - 6));
105TEST(ArcaneAccelerator, Reduce)
109 bool is_copyable = std::is_trivially_copyable_v<ReducerSum2<Int64>>;
110 std::cout <<
"IS_REDUCE_COPYABLE=" << is_copyable <<
"\n";
Types et fonctions pour gérer les synchronisations sur les accélérateurs.
Types et macros pour gérer les boucles sur les accélérateurs.
#define RUNCOMMAND_LOOP1(iter_name, x1,...)
Boucle sur accélérateur avec arguments supplémentaires pour les réductions.
Classe pour effectuer une réduction 'max'.
Classe pour effectuer une réduction 'min'.
Classe pour effectuer une réduction 'somme'.
Gestion d'une commande sur accélérateur.
File d'exécution pour un accélérateur.
Gestionnaire d'exécution pour accélérateur.
Espace de nom pour l'utilisation des accélérateurs.
RunCommand makeCommand(const RunQueue &run_queue)
Créé une commande associée à la file run_queue.
RunQueue makeQueue(const Runner &runner)
Créé une file associée à runner.
eExecutionPolicy
Politique d'exécution pour un Runner.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-