Arcane  v3.15.3.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Filterer.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/* Filtering.cc (C) 2000-2025 */
9/* */
10/* Algorithme de filtrage. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/accelerator/Filter.h"
15
16#include "arcane/utils/ValueConvert.h"
17
18/*---------------------------------------------------------------------------*/
19/*---------------------------------------------------------------------------*/
20
21namespace Arcane::Accelerator::impl
22{
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27GenericFilteringBase::
28GenericFilteringBase()
29{
30}
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35Int32 GenericFilteringBase::
36_nbOutputElement()
37{
39 m_is_already_called = false;
40 return m_host_nb_out_storage[0];
41}
42
43/*---------------------------------------------------------------------------*/
44/*---------------------------------------------------------------------------*/
45
46void GenericFilteringBase::
47_allocate()
48{
49 if (auto v = Convert::Type<Int32>::tryParseFromEnvironment("ARCANE_FILTERER_USE_HOSTPINNED_STORAGE", true))
50 m_use_direct_host_storage = (v.value() != 0);
51
52 // Pour l'instant l'usage direct de l'hôte n'est testé qu'avec CUDA.
55
56 eMemoryRessource r = eMemoryRessource::HostPinned;
57 if (m_host_nb_out_storage.memoryRessource() != r)
58 m_host_nb_out_storage = NumArray<Int32, MDDim1>(r);
59 m_host_nb_out_storage.resize(1);
60}
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64
65void GenericFilteringBase::
66_allocateTemporaryStorage(size_t size)
67{
68 m_algo_storage.allocate(size);
69}
70
71/*---------------------------------------------------------------------------*/
72/*---------------------------------------------------------------------------*/
73
74int* GenericFilteringBase::
75_getDeviceNbOutPointer()
76{
78 return m_host_nb_out_storage.to1DSpan().data();
79
80 return m_device_nb_out_storage.allocate();
81}
82
83/*---------------------------------------------------------------------------*/
84/*---------------------------------------------------------------------------*/
85
86void GenericFilteringBase::
87_copyDeviceNbOutToHostNbOut()
88{
91}
92
93/*---------------------------------------------------------------------------*/
94/*---------------------------------------------------------------------------*/
95
96void GenericFilteringBase::
97_setCalled()
98{
100 ARCANE_FATAL("apply() has already been called for this instance");
101 m_is_already_called = true;
102}
103
104/*---------------------------------------------------------------------------*/
105/*---------------------------------------------------------------------------*/
106
107bool GenericFilteringBase::
108_checkEmpty(Int32 nb_value)
109{
110 if (nb_value <= 0) {
112 return true;
113 }
114 return false;
115}
116
117/*---------------------------------------------------------------------------*/
118/*---------------------------------------------------------------------------*/
119
120} // namespace Arcane::Accelerator::impl
121
122/*---------------------------------------------------------------------------*/
123/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
void barrier() const
Bloque tant que toutes les commandes associées à la file ne sont pas terminées.
Definition RunQueue.cc:159
eExecutionPolicy executionPolicy() const
Politique d'exécution de la file.
Definition RunQueue.cc:169
void copyToAsync(SmallSpan< DataType > dest_ptr, const RunQueue &queue)
Copie l'instance dans dest_ptr.
DeviceStorage< int > m_device_nb_out_storage
Mémoire sur le device du nombre de valeurs filtrées.
bool m_is_already_called
Indique si un appel est en cours.
NumArray< Int32, MDDim1 > m_host_nb_out_storage
Mémoire hôte pour le nombre de valeurs filtrées.
RunQueue m_queue
File d'exécution. Ne doit pas être nulle.
bool m_use_direct_host_storage
Indique quelle mémoire est utilisée pour le nombre de valeurs filtrées.
@ CUDA
Politique d'exécution utilisant l'environnement CUDA.
Arccore::eMemoryResource eMemoryRessource
Typedef pour la version Arcane historique (avec 2's')