Skip to content

Commit c9165e2

Browse files
Merge pull request #1810 from arcaneframework/dev/gg-update-doc-for-accelerator-memory
Update documentation about accelerator memory management
2 parents 9347e76 + 04fb1e1 commit c9165e2

File tree

3 files changed

+51
-10
lines changed

3 files changed

+51
-10
lines changed

arcane/doc/doc_user/chap_acceleratorapi/4_accelerator.md

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -316,12 +316,18 @@ auto out_c = viewOut(command,var_c);
316316

317317
### Gestion mémoire des données gérées par Arcane
318318

319-
Lorqu'on utilise les accélérateurs, %Arcane utilise la mémoire unifée
320-
(aussi appelée mémoire "managée") pour toutes les variables
321-
(\arcane{VariableRef}), pour les groupes d'entités
322-
(\arcane{ItemGroup}) et par défaut pour les \arcane{NumArray}. Cela
323-
signifie que les données correspondantes à ces objets sont accessibles
324-
à la fois sur l'hôte (CPU) et sur les accélérateurs.
319+
Par défaut, %Arcane utilise l'allocateur retourné par
320+
\arcane{MeshUtils::getDefaultDataAllocator()} pour le type
321+
\arcane{NumArray} ainsi que toutes les variables
322+
(\arcane{VariableRef}), les groupes d'entités
323+
(\arcane{ItemGroup}) et les connectivités.
324+
325+
Lorsqu'on utilise les accélérateurs, %Arcane requiert que cet
326+
allocateur alloue de la mémoire qui soit accessible à la fois sur
327+
l'hôte et l'accélérateur. Cela signifie que les données
328+
correspondantes à ces objets sont accessibles à la fois sur l'hôte
329+
(CPU) et sur les accélérateurs. Pour cela, %Arcane utilise par défaut
330+
la mémoire unifiée (\arccore{eMemoryResource::UnifiedMemory}).
325331

326332
Avec la mémoire unifiée, c'est l'accélérateur qui gère automatiquement
327333
les éventules transferts mémoire entre l'accélérateur et l'hôte. Ces
@@ -330,16 +336,29 @@ une donnée n'est utilisée que sur CPU ou que sur accélérateur, il n'y
330336
aura pas de transferts mémoire et donc les performances ne seront pas
331337
impactées.
332338

339+
A partir de la version 3.14.12 de %Arcane, il est possible de changer
340+
la ressoure mémoire utilisée par défaut via la variable
341+
d'environnement `ARCANE_DEFAULT_DATA_MEMORY_RESOURCE`. Sur les
342+
accélérateurs où la mémoire \arccore{eMemoryResource::Device} est
343+
accessible directement depuis l'hôte (par exemple MI250X, MI300A,
344+
GH200), cela permet d'éviter les transferts que peut provoquer la
345+
mémoire unifiée.
346+
347+
Dans tous les cas, il est possible de spécifier un allocateur
348+
spécifique pour \arccore{UniqueArray} et \arcane{NumArray} via les
349+
méthodes \arcane{MemoryUtils::getAllocator()} ou
350+
\arcane{MemoryUtils::getAllocationOptions()}.
351+
333352
%Arcane fournit des mécanismes permettant de donner des informations
334353
permettant d'optimiser la gestion de cette mémoire. Ces mécanismes
335354
sont dépendants du type de l'accélérateur et peuvent ne pas être
336355
disponible partout. Ils sont accessibles via la méthode
337356
\arcaneacc{Runner::setMemoryAdvice()}.
338357

339-
A partir de la version 3.10 de %Arcane et avec les accélérateurs NVIDIA, %Arcame
340-
propose des fonctionnalités pour détecter les transferts mémoire entre
341-
le CPU et l'accélérateur. La page \ref arcanedoc_debug_perf_cupti
342-
décrit ce fonctionnement.
358+
A partir de la version 3.10 de %Arcane et avec les accélérateurs
359+
NVIDIA, %Arcane propose des fonctionnalités pour détecter les
360+
transferts mémoire entre le CPU et l'accélérateur. La page \ref
361+
arcanedoc_debug_perf_cupti décrit ce fonctionnement.
343362

344363
### Exemple d'utilisation d'une boucle complexe {#arcanedoc_parallel_accelerator_complexloop}
345364

arcane/src/arcane/accelerator/CommonUtils.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,15 @@
2626
/*---------------------------------------------------------------------------*/
2727
/*---------------------------------------------------------------------------*/
2828

29+
/*!
30+
* \namespace Arcane::Accelerator::AcceleratorUtils
31+
*
32+
* \brief Espace de nom pour les méthodes utilitaires des accélérateurs.
33+
*/
34+
35+
/*---------------------------------------------------------------------------*/
36+
/*---------------------------------------------------------------------------*/
37+
2938
namespace Arcane::Accelerator::impl
3039
{
3140

arcane/src/arcane/utils/MemoryUtils.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,23 @@
2323

2424
/*---------------------------------------------------------------------------*/
2525
/*---------------------------------------------------------------------------*/
26+
/*!
27+
* \file MemoryUtils.h
28+
* \brief Fonctions de gestion mémoire et des allocateurs.
29+
*/
30+
/*!
31+
* \namespace Arcane::MemoryUtils
32+
* \brief Espace de noms pour les fonctions de gestion mémoire et des allocateurs.
33+
*/
34+
/*---------------------------------------------------------------------------*/
35+
/*---------------------------------------------------------------------------*/
2636

2737
namespace Arcane
2838
{
2939

40+
/*---------------------------------------------------------------------------*/
41+
/*---------------------------------------------------------------------------*/
42+
3043
namespace
3144
{
3245
IMemoryAllocator* global_accelerator_host_memory_allocator = nullptr;

0 commit comments

Comments
 (0)