Arcane  v3.16.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
TestPartition_Kernel.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"
12
13#include "arcane/accelerator/GenericPartitioner.h"
16
17/*---------------------------------------------------------------------------*/
18/*---------------------------------------------------------------------------*/
19
20using namespace Arcane;
21using namespace Arcane::Accelerator;
22
23extern "C++" void _doPartition1(RunQueue queue, SmallSpan<Real> values, SmallSpan<Real> final_values)
24{
25 std::cout << "DO_Partition_1\n";
26
27 const Int32 nb_value = values.size();
28 NumArray<Real, MDDim1> input(nb_value);
29 //, { 1.3, 4.5, -1.2, 3.5, 7.0, 4.2, 2.3, 1.6 });
30 input.copy(values, queue);
31 NumArray<Real, MDDim1> output(nb_value);
32 auto input_values = viewIn(queue, input);
33 auto output_values = viewOut(queue, output);
34 auto select_lambda = [=] ARCCORE_HOST_DEVICE(Int32 input_index) {
35 return input_values[input_index] > 2.0;
36 };
37 auto setter_lambda = [=] ARCCORE_HOST_DEVICE(Int32 input_index, Int32 output_index) {
38 output_values[output_index] = input_values[input_index];
39 };
41 partitioner.applyWithIndex(nb_value, setter_lambda, select_lambda, A_FUNCINFO);
42 Int32 nb_first_part = partitioner.nbFirstPart();
43 std::cout << "NbFirstPart = " << nb_first_part << "\n";
44 std::cout << "Input=" << values << "\n";
45 std::cout << "Output=" << output.to1DSmallSpan() << "\n";
46 std::cout << "Expected=" << final_values << "\n";
47 // Expected nb_first_part = 4
48 // Expected output : [0]="4.5" [1]="3.5" [2]="7" [3]="4.2" [4]="2.3" [5]="1.6" [6]="-1.2" [7]="1.3"
49 ASSERT_EQ(output.to1DSmallSpan(), final_values);
50}
51
52/*---------------------------------------------------------------------------*/
53/*---------------------------------------------------------------------------*/
Types et macros pour gérer les boucles sur les accélérateurs.
Algorithme générique de partitionnement d'une liste.
File d'exécution pour un 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:673
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Definition Span.h:212
Espace de nom pour l'utilisation des accélérateurs.
auto viewOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture pour les variables materiaux scalaire.
auto viewIn(const ViewBuildInfo &vbi, const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture pour les variables materiaux scalaire.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-