8#include <gtest/gtest.h>
10#include "arccore/base/PlatformUtils.h"
12#include "arccore/common/accelerator/Runner.h"
13#include "arccore/common/accelerator/RunQueue.h"
14#include "arccore/common/NumArray.h"
19#include "arccore/accelerator/internal/Initializer.h"
21#include "./TestCommon.h"
34 Int32 nb_value, Int32 nb_part, Int32 nb_loop,
bool is_async);
37 Int32 nb_value, Int32 nb_part, Int32 nb_loop,
bool is_async);
42void _doTestReduceDirect(
bool use_accelerator, Int32 max_allowed_thread)
45 Runner runner(x.executionPolicy());
47 if (queue.isAcceleratorPolicy())
50 Int32 nb_value = 1000000;
51 Int64 expected_value = 1000004000000;
54 expected_value = 100000040000000;
57 Int32 nb_thread = 256;
59 if (!queue.isAcceleratorPolicy()) {
69 std::cout <<
"Using accelerator policy name=" << queue.executionPolicy() <<
"\n";
70 std::cout <<
"Sizeof (ReducerSum2<Int64>) = " <<
sizeof(
ReducerSum2<Int64>) <<
" nb_loop=" << nb_loop <<
"\n";
74 host_c.resize(nb_value);
76 for (Int32 i = 0; i < nb_value; ++i) {
77 host_c(i) = (i + 2) + (i + 3);
85 for (Int32 k = 1; k < 5; ++k) {
87 Int64 v = _testReduceDirect(queue, c, nb_thread, nb_value, nb_part, nb_loop,
false);
88 Int64 v2 = v / nb_loop;
89 ASSERT_EQ(v2, expected_value);
92 Int64 v = _testReduceDirect(queue, c, nb_thread, nb_value, nb_part, nb_loop,
true);
93 Int64 v2 = v / nb_loop;
94 ASSERT_EQ(v2, expected_value);
100 for (Int32 k = 1; k < 5; ++k) {
102 Int64 v = _testReduceGridStride(queue, c, nb_thread, nb_value, nb_part, nb_loop,
false);
103 Int64 v2 = v / nb_loop;
104 ASSERT_EQ(v2, expected_value);
107 Int64 v = _testReduceGridStride(queue, c, nb_thread, nb_value, nb_part, nb_loop,
true);
108 Int64 v2 = v / nb_loop;
109 ASSERT_EQ(v2, expected_value);
115 Int64 v = _testReduceEmpty(queue, {});
120ARCCORE_TEST_DO_TEST_ACCELERATOR(ArccoreAccelerator, TestReduceDirect, _doTestReduceDirect);
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.
Classe interne pour initialiser le runtime accélérateur.
Classe pour effectuer une réduction 'somme'.
File d'exécution pour un accélérateur.
Gestionnaire d'exécution pour accélérateur.
Tableaux multi-dimensionnels pour les types numériques accessibles sur accélérateurs.
Vue d'un tableau d'éléments de type T.
Espace de nom pour l'utilisation des accélérateurs.
RunQueue makeQueue(const Runner &runner)
Créé une file associée à runner.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ARCCORE_BASE_EXPORT bool arccoreIsDebug()
Vrai si la macro ARCCORE_DEBUG est définie.
eMemoryResource
Liste des ressources mémoire disponibles.
@ Device
Alloue sur le device.