|
| 1 | +# Pool de mémoire {#arcanedoc_acceleratorapi_memorypool} |
| 2 | + |
| 3 | +[TOC] |
| 4 | + |
| 5 | +%Arcane dispose depuis la version 3.14.10 (novembre 2024) d'un |
| 6 | +mécanisme de pool mémoire permettant de conserver une partie de la |
| 7 | +mémoire allouée pour les accélérateurs et ainsi éviter des appels |
| 8 | +couteux aux fonctions d'allocations ou de désallocation. |
| 9 | + |
| 10 | +\note Ce mécanisme est pour l'instant expérimental et ne fonctionne |
| 11 | +que pour CUDA. |
| 12 | + |
| 13 | +\warning L'utilisation du pool mémoire peut changer le comportement du |
| 14 | +code en supprimant des synchronisations implicites effectuées sur les |
| 15 | +streams associées aux allocations et au désallocation. Notamment, les |
| 16 | +appels tels que `cudaMalloc()` ou `cudaFree()`. La page |
| 17 | +[CUDA implicit synchronization behavior and conditions in detail] |
| 18 | +(https://forums.developer.nvidia.com/t/cuda-implicit-synchronization-behavior-and-conditions-in-detail/251729) |
| 19 | +explique ce comportement pour CUDA. |
| 20 | + |
| 21 | +Le gestionnaire de pool mémoire est désactivé par défaut. Il est |
| 22 | +possible de l'activer et de modifier son comportement en positionnant |
| 23 | +des variables d'environnements. |
| 24 | + |
| 25 | +<table> |
| 26 | +<tr><th>Variable d'environnement</th><th>Description</th></tr> |
| 27 | + |
| 28 | +<tr> |
| 29 | +<td>ARCANE_ACCELERATOR_MEMORY_POOL</td> |
| 30 | +<td> |
| 31 | +Indique le type de mémoire pour lesquelles on souhaite activer le |
| 32 | +pool. Les valeeurs sont spécifiées par une combinaison de bit: |
| 33 | +- 1 pour la mémoire managée (\arcane{eMemoryRessource::UnifiedMemory}) |
| 34 | +- 2 pour la mémoire sur l'accélérateur (\arcane{eMemoryRessource::Device}) |
| 35 | +- 4 pour la mémoire punaisée sur l'hôte |
| 36 | + (\arcane{eMemoryRessource::HostPinned}) |
| 37 | + |
| 38 | +Si la valeur de la variable d'environnement vaut `7` par exemple, |
| 39 | +alors le pool mémoire est actif pour ces 3 types de ressource mémoire. |
| 40 | +</td> |
| 41 | +</tr> |
| 42 | + |
| 43 | +<tr> |
| 44 | +<td>ARCANE_ACCELERATOR_MEMORY_POOL_MAX_BLOCK_SIZE</td> |
| 45 | +<td> |
| 46 | +Indique la taille maximale (en octet) des blocs qui sont conservés |
| 47 | +dans le pool mémoire. Une valeur élevée permet de faire moins |
| 48 | +d'allocations et de désallocation mais en contre-partie conserve plus |
| 49 | +de mémorie ce qui réduit la quantité disponible pour les allocations |
| 50 | +qui ne passent pas par le pool de mémoire. La valeur par défaut est de |
| 51 | +1Mo (1024*1024). |
| 52 | +</td> |
| 53 | +</tr> |
| 54 | + |
| 55 | +<tr> |
| 56 | +<td>ARCANE_ACCELERATOR_MEMORY_PRINT_LEVEL</td> |
| 57 | +<td> |
| 58 | +Indique si on affiche des informations sur l'utilisation de la |
| 59 | +mémoire. Ces informations sont utiles pour le débug uniquement. Les |
| 60 | +valeurs possibles sont: |
| 61 | +- 0 n'affiche aucune information |
| 62 | +- 1 affiche des statistiques d'utilisation en fin de calcul |
| 63 | +- 2 idem 1 et affiche des informations lors des réallocations |
| 64 | +- 3 idem 2 et affiche la pile d'appel pour une réallocation pour les |
| 65 | + tableaux sans nom. |
| 66 | +- 4 idem 3 mais affiche la pile d'appel lors de la réallocation pour |
| 67 | + tous les tableaux. |
| 68 | +</td> |
| 69 | +</tr> |
| 70 | + |
| 71 | +</table> |
| 72 | + |
| 73 | +____ |
| 74 | + |
| 75 | +<div class="section_buttons"> |
| 76 | +<span class="back_section_button"> |
| 77 | +\ref arcanedoc_acceleratorapi_reduction |
| 78 | +</span> |
| 79 | +</div> |
0 commit comments