@@ -316,12 +316,18 @@ auto out_c = viewOut(command,var_c);
316
316
317
317
### Gestion mémoire des données gérées par Arcane
318
318
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}).
325
331
326
332
Avec la mémoire unifiée, c'est l'accélérateur qui gère automatiquement
327
333
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
330
336
aura pas de transferts mémoire et donc les performances ne seront pas
331
337
impactées.
332
338
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
+
333
352
%Arcane fournit des mécanismes permettant de donner des informations
334
353
permettant d'optimiser la gestion de cette mémoire. Ces mécanismes
335
354
sont dépendants du type de l'accélérateur et peuvent ne pas être
336
355
disponible partout. Ils sont accessibles via la méthode
337
356
\arcaneacc{Runner::setMemoryAdvice()}.
338
357
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.
343
362
344
363
### Exemple d'utilisation d'une boucle complexe {#arcanedoc_parallel_accelerator_complexloop}
345
364
0 commit comments