Arcane dispose depuis la version 3.14.10 (novembre 2024) d'un mécanisme de pool mémoire permettant de conserver une partie de la mémoire allouée pour les accélérateurs et ainsi éviter des appels couteux aux fonctions d'allocations ou de désallocation.
cudaMalloc()
ou cudaFree()
. La page [CUDA implicit synchronization behavior and conditions in detail] (https://forums.developer.nvidia.com/t/cuda-implicit-synchronization-behavior-and-conditions-in-detail/251729) explique ce comportement pour CUDA.Le gestionnaire de pool mémoire est désactivé par défaut. Il est possible de l'activer et de modifier son comportement en positionnant des variables d'environnements.
Variable d'environnement | Description |
---|---|
ARCANE_ACCELERATOR_MEMORY_POOL | Indique le type de mémoire pour lesquelles on souhaite activer le pool. Les valeeurs sont spécifiées par une combinaison de bit:
Si la valeur de la variable d'environnement vaut |
ARCANE_ACCELERATOR_MEMORY_POOL_MAX_BLOCK_SIZE | Indique la taille maximale (en octet) des blocs qui sont conservés dans le pool mémoire. Une valeur élevée permet de faire moins d'allocations et de désallocation mais en contre-partie conserve plus de mémorie ce qui réduit la quantité disponible pour les allocations qui ne passent pas par le pool de mémoire. La valeur par défaut est de 1Mo (1024*1024). |
ARCANE_ACCELERATOR_MEMORY_PRINT_LEVEL | Indique si on affiche des informations sur l'utilisation de la mémoire. Ces informations sont utiles pour le débug uniquement. Les valeurs possibles sont:
|