Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
TestReduce.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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#include <gtest/gtest.h>
9
10#include "arcane/accelerator/core/Runner.h"
11#include "arcane/accelerator/core/RunQueue.h"
14
15/*---------------------------------------------------------------------------*/
16/*---------------------------------------------------------------------------*/
17
18extern "C++" void arcaneRegisterDefaultAcceleratorRuntime();
19extern "C++" Arcane::Accelerator::eExecutionPolicy arcaneGetDefaultExecutionPolicy();
20
21using namespace Arcane;
22using namespace Arcane::Accelerator;
23
24namespace
25{
26void _doInit()
27{
28 arcaneRegisterDefaultAcceleratorRuntime();
29}
31{
32 return arcaneGetDefaultExecutionPolicy();
33}
34} // namespace
35
36void _doReduce1()
37{
38 std::cout << "DO_REDUCE_1\n";
40 RunQueue queue(makeQueue(runner));
41 {
42 RunCommand command(makeCommand(queue));
43 Int32 nb_iter = 96;
45 command << RUNCOMMAND_LOOP1(iter, nb_iter)
46 {
47 auto [i] = iter();
48 reducer_sum.combine(i + 1);
49 };
51 std::cout << "NB_ITER=" << nb_iter << "\n";
52 std::cout << "VALUE sum=" << computed_sum
53 << "\n";
54 Int64 expected_sum = (nb_iter * (nb_iter + 1)) / 2;
55 std::cout << "VALUE sum=" << computed_sum
56 << " expected=" << expected_sum
57 << "\n";
59 }
60}
61
62void _doReduce2()
63{
64 std::cout << "DO_REDUCE_2\n";
66 RunQueue queue(makeQueue(runner));
67 {
68 RunCommand command(makeCommand(queue));
69 Int32 nb_iter = 4356;
77 auto [i] = iter();
78 reducer_sum.combine(i + 1);
79 reducer_min.combine(i + 5);
80 reducer_max.combine(i - 5);
81 };
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
88 << "\n";
89
90 Int64 expected_sum = (nb_iter * (nb_iter + 1)) / 2;
91
92 std::cout << "VALUE sum=" << computed_sum
93 << " expected=" << expected_sum
94 << "\n";
95 std::cout << "MIN/MAX VALUE min=" << computed_min
96 << " max=" << computed_max
97 << "\n";
98
102 }
103}
104
105TEST(ArcaneAccelerator, Reduce)
106{
107 _doInit();
108
109 bool is_copyable = std::is_trivially_copyable_v<ReducerSum2<Int64>>;
110 std::cout << "IS_REDUCE_COPYABLE=" << is_copyable << "\n";
111 //ASSERT_TRUE(is_copyable);
112
113 _doReduce1();
114 _doReduce2();
115}
116
117/*---------------------------------------------------------------------------*/
118/*---------------------------------------------------------------------------*/
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.
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.
Definition core/Runner.h:53
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
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 -*-