Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
VariableUtils.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/* VariableUtils.cc (C) 2000-2024 */
9/* */
10/* Fonctions utilitaires diverses sur les variables. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
15
16#include "arcane/utils/MemoryUtils.h"
17
18#include "arcane/accelerator/core/RunQueue.h"
19#include "arcane/accelerator/core/Memory.h"
20
21#include "arcane/core/IData.h"
22#include "arcane/core/IVariable.h"
23#include "arcane/core/VariableRef.h"
24#include "arcane/core/internal/IDataInternal.h"
25#include "arcane/core/internal/IVariableInternal.h"
26#include "arcane/core/datatype/DataAllocationInfo.h"
28#include "arcane/core/materials/internal/IMeshMaterialVariableInternal.h"
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
38/*---------------------------------------------------------------------------*/
39
40namespace Arcane
41{
42using namespace Arcane::Accelerator;
43
44/*---------------------------------------------------------------------------*/
45/*---------------------------------------------------------------------------*/
46
47void VariableUtils::
48prefetchVariableAsync(IVariable* var, const RunQueue* queue_or_null)
49{
51 if (!queue_or_null)
52 return;
53 if (!var->isUsed())
54 return;
55 IData* d = var->data();
56 INumericDataInternal* nd = d->_commonInternal()->numericData();
57 if (!nd)
58 return;
59 ConstMemoryView mem_view = nd->memoryView();
60 queue_or_null->prefetchMemory(MemoryPrefetchArgs(mem_view).addAsync());
61}
62
63/*---------------------------------------------------------------------------*/
64/*---------------------------------------------------------------------------*/
65
66void VariableUtils::
67prefetchVariableAsync(VariableRef& var, const RunQueue* queue_or_null)
68{
69 return prefetchVariableAsync(var.variable(), queue_or_null);
70}
71
72/*---------------------------------------------------------------------------*/
73/*---------------------------------------------------------------------------*/
74
75void VariableUtils::
76markVariableAsMostlyReadOnly(IVariable* var)
77{
78 DataAllocationInfo alloc_info(eMemoryLocationHint::HostAndDeviceMostlyRead);
79 var->setAllocationInfo(alloc_info);
80}
81
82/*---------------------------------------------------------------------------*/
83/*---------------------------------------------------------------------------*/
84
85void VariableUtils::
86markVariableAsMostlyReadOnly(VariableRef& var)
87{
88 return markVariableAsMostlyReadOnly(var.variable());
89}
90
91/*---------------------------------------------------------------------------*/
92/*---------------------------------------------------------------------------*/
93
94void VariableUtils::
95markVariableAsMostlyReadOnly(::Arcane::Materials::MeshMaterialVariableRef& var)
96{
97 auto vars = var.materialVariable()->_internalApi()->variableReferenceList();
98 for (VariableRef* v : vars)
99 markVariableAsMostlyReadOnly(v->variable());
100}
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104
105void VariableUtils::
106experimentalChangeAllocator(::Arcane::Materials::IMeshMaterialVariable* var,
108{
109 MemoryAllocationOptions mem_opts(MemoryUtils::getAllocationOptions(mem));
111 for (VariableRef* vref : mat_var->variableReferenceList())
112 vref->variable()->_internalApi()->changeAllocator(mem_opts);
113 var->globalVariable()->_internalApi()->changeAllocator(mem_opts);
114}
115
116/*---------------------------------------------------------------------------*/
117/*---------------------------------------------------------------------------*/
118
119void VariableUtils::
120experimentalChangeAllocator(IVariable* var, eMemoryRessource mem)
121{
122 MemoryAllocationOptions mem_opts(MemoryUtils::getAllocationOptions(mem));
123 var->_internalApi()->changeAllocator(mem_opts);
124}
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
128
129void VariableUtils::
130experimentalChangeAllocator(VariableRef& var, eMemoryRessource mem)
131{
132 experimentalChangeAllocator(var.variable(), mem);
133}
134
135/*---------------------------------------------------------------------------*/
136/*---------------------------------------------------------------------------*/
137
138} // namespace Arcane
139
140/*---------------------------------------------------------------------------*/
141/*---------------------------------------------------------------------------*/
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Fonctions utilitaires sur les variables.
void markVariableAsMostlyReadOnly(IVariable *var)
Indique que la variable est essentiellement en lecture.
void prefetchVariableAsync(IVariable *var, const RunQueue *queue_or_null)
Pré-copie la mémoire associée à la variable var.
Arguments pour le préfetching mémoire.
Definition Memory.h:125
File d'exécution pour un accélérateur.
Informations sur l'allocation d'une donnée.
Interface d'une donnée.
Definition IData.h:33
virtual IDataInternal * _commonInternal()=0
Interface pour un 'IData' d'un type numérique.
Interface d'une variable.
Definition IVariable.h:54
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
API interne Arcane de 'IMeshMaterialVariable'.
Interface d'une variable matériau d'un maillage.
Classe de base des références aux variables matériaux.
Référence à une variable.
Definition VariableRef.h:56
Options pour configurer les allocations.
Espace de nom pour l'utilisation des accélérateurs.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eMemoryRessource
Liste des ressources mémoire disponibles.