Arcane  v4.1.2.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
TestPartition.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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"
12
13#include "arcane/accelerator/GenericPartitioner.h"
14#include "arcane/accelerator/RunCommandLoop.h"
15#include "arcane/accelerator/NumArrayViews.h"
16
17#include "arcane/utils/Exception.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22extern "C++" void arcaneRegisterDefaultAcceleratorRuntime();
23extern "C++" Arcane::Accelerator::eExecutionPolicy arcaneGetDefaultExecutionPolicy();
24
25using namespace Arcane;
26using namespace Arcane::Accelerator;
27
28namespace
29{
30void _doInit()
31{
32 arcaneRegisterDefaultAcceleratorRuntime();
33}
34Arcane::Accelerator::eExecutionPolicy _defaultExecutionPolicy()
35{
36 return arcaneGetDefaultExecutionPolicy();
37}
38} // namespace
39
40extern "C++" void _doPartition1(RunQueue queue, SmallSpan<Real> values, SmallSpan<Real> final_values);
41
42TEST(ArcaneAccelerator, Partition)
43{
44 auto f = [] {
45 _doInit();
46
47 Runner runner(_defaultExecutionPolicy());
48 RunQueue queue(makeQueue(runner));
49
50 std::array<Real, 8> v1{ 1.3, 4.5, -1.2, 3.5, 7.0, 4.2, 2.3, 1.6 };
51 std::array<Real, 8> r1{ 4.5, 3.5, 7.0, 4.2, 2.3, 1.6, -1.2, 1.3 };
52 _doPartition1(queue, SmallSpan<Real>(v1), SmallSpan<Real>(r1));
53
54 std::array<Real, 9> v2{ 1.3, 4.5, -1.2, 3.5, 7.0, 4.2, 2.3, 1.6, 1.1 };
55 std::array<Real, 9> r2{ 4.5, 3.5, 7.0, 4.2, 2.3, 1.1, 1.6, -1.2, 1.3 };
56 _doPartition1(queue, SmallSpan<Real>(v2), SmallSpan<Real>(r2));
57
58 std::array<Real, 3> v3{ 1.3, -1.2, 0.5 };
59 std::array<Real, 3> r3{ 0.5, -1.2, 1.3 };
60 _doPartition1(queue, SmallSpan<Real>(v3), SmallSpan<Real>(r3));
61
62 std::array<Real, 4> v4{ 3.5, 2.3, 4.5, 5.6 };
63 std::array<Real, 4> r4{ 3.5, 2.3, 4.5, 5.6 };
64 _doPartition1(queue, SmallSpan<Real>(v4), SmallSpan<Real>(r4));
65
66 std::array<Real, 10> v5{ 1.3, 4.5, -1.2, 3.5, 7.0, 4.2, 2.3, 1.6, 1.1, 1.5 };
67 std::array<Real, 10> r5{ 4.5, 3.5, 7.0, 4.2, 2.3, 1.5, 1.1, 1.6, -1.2, 1.3 };
68 _doPartition1(queue, SmallSpan<Real>(v5), SmallSpan<Real>(r5));
69 };
71}
72
73/*---------------------------------------------------------------------------*/
74/*---------------------------------------------------------------------------*/
Gestionnaire d'exécution pour accélérateur.
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.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
void arcaneCallFunctionAndTerminateIfThrow(std::function< void()> function)