Arcane  v4.1.4.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
TestCooperativeLaunch1.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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 "arccore/base/PlatformUtils.h"
11
12#include "arccore/common/accelerator/Runner.h"
13#include "arccore/common/accelerator/RunQueue.h"
14#include "arccore/common/NumArray.h"
15#include "arccore/common/accelerator/Memory.h"
16
20#include "arccore/accelerator/internal/Initializer.h"
21
22#include "./TestCommon.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27using namespace Arcane;
28using namespace Arcane::Accelerator;
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
33extern "C++" Int64
34_testCooperativeLaunch(RunQueue queue, SmallSpan<const Int64> c, Int32 nb_thread,
35 Int32 nb_value, Int32 nb_part, Int32 nb_loop);
36
37void _doTestCooperativeLaunch(bool use_accelerator)
38{
39 Accelerator::Initializer x(use_accelerator, 0);
40 Runner runner(x.executionPolicy());
41 RunQueue queue(makeQueue(runner));
42 if (queue.isAcceleratorPolicy())
43 queue.setMemoryRessource(eMemoryResource::Device);
44 Int32 nb_loop = 1000;
45 Int32 nb_value = 1000000;
46 Int64 expected_value = 1000004000000;
47
48 nb_value = 10000000;
49 expected_value = 100000040000000;
50 nb_loop = 100;
51 nb_loop = 25;
52
53 Int32 nb_thread = 256;
54 Int32 nb_part = 1;
55 if (!queue.isAcceleratorPolicy()) {
56 if (arccoreIsDebug())
57 nb_loop /= 20;
58 else
59 nb_loop /= 4;
60 if (nb_loop == 0)
61 nb_loop = 1;
62 }
63 //nb_loop = 1;
64
65 std::cout << "Using accelerator policy name=" << queue.executionPolicy() << " nb_loop=" << nb_loop << "\n";
66
67 eMemoryResource mem = queue.memoryResource();
69 host_c.resize(nb_value);
70 {
71 for (Int32 i = 0; i < nb_value; ++i) {
72 host_c(i) = (i + 2) + (i + 3);
73 };
74 }
75
77 c.copy(host_c);
78
79 nb_part = 1;
80 eExecutionPolicy policy = runner.executionPolicy();
81 for (Int32 k = 1; k < 5; ++k) {
82 {
83 Int64 v = _testCooperativeLaunch(queue, c, nb_thread, nb_value, nb_part, nb_loop);
84 Int64 v2 = v / nb_loop;
86 ASSERT_EQ(v2, expected_value);
87 }
88 }
89 nb_part *= 2;
90 }
91}
92
93ARCCORE_TEST_DO_TEST_ACCELERATOR(ArccoreAccelerator, TestCooperativeLaunch, _doTestCooperativeLaunch);
94
95/*---------------------------------------------------------------------------*/
96/*---------------------------------------------------------------------------*/
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 pour initialiser le runtime accélérateur.
Definition Initializer.h:31
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.
Definition Span.h:801
Espace de nom pour l'utilisation des accélérateurs.
RunQueue makeQueue(const Runner &runner)
Créé une file associée à runner.
eExecutionPolicy
Politique d'exécution pour un Runner.
@ HIP
Politique d'exécution utilisant l'environnement HIP.
@ CUDA
Politique d'exécution utilisant l'environnement CUDA.
@ Sequential
Politique d'exécution séquentielle.
-*- 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.
@ Host
Alloue sur l'hôte.
@ Device
Alloue sur le device.