Allocateur mémoire avec alignement mémoire spécifique. Plus de détails...
Graphe d'héritage de Arcane::AlignedMemoryAllocator:
Graphe de collaboration de Arcane::AlignedMemoryAllocator:Fonctions membres publiques | |
| bool | hasRealloc (MemoryAllocationArgs) const override |
| Indique si l'allocateur supporte la sémantique de realloc. | |
| AllocatedMemoryInfo | allocate (MemoryAllocationArgs args, Int64 new_size) override |
| AllocatedMemoryInfo | reallocate (MemoryAllocationArgs args, AllocatedMemoryInfo current_ptr, Int64 new_size) override |
| Réalloue de la mémoire pour new_size octets et retourne le pointeur. | |
| void | deallocate (MemoryAllocationArgs args, AllocatedMemoryInfo ptr) override |
| Libère la mémoire dont l'adresse de base est ptr. | |
| Int64 | adjustedCapacity (MemoryAllocationArgs args, Int64 wanted_capacity, Int64 element_size) const override |
| Ajuste la capacité suivant la taille d'élément. | |
| size_t | guaranteedAlignment (MemoryAllocationArgs) const override |
| Valeur de l'alignement garanti par l'allocateur. | |
| eMemoryResource | memoryResource () const override |
| Ressource mémoire fournie par l'allocateur. | |
Fonctions membres publiques hérités de Arcane::IMemoryAllocator | |
| virtual | ~IMemoryAllocator ()=default |
| Détruit l'allocateur. | |
| virtual size_t | guarantedAlignment (MemoryAllocationArgs args) const |
| Valeur de l'alignement garanti par l'allocateur. | |
| virtual void | notifyMemoryArgsChanged (MemoryAllocationArgs old_args, MemoryAllocationArgs new_args, AllocatedMemoryInfo ptr) |
| Notifie du changement des arguments spécifiques à l'instance. | |
| virtual void | copyMemory (MemoryAllocationArgs args, AllocatedMemoryInfo destination, AllocatedMemoryInfo source) |
| Copie la mémoire entre deux zones. | |
Fonctions membres publiques statiques | |
| static constexpr Integer | simdAlignment () |
| Alignement pour les structures utilisant la vectorisation. | |
| static constexpr Integer | cacheLineAlignment () |
| Alignement pour une ligne de cache. | |
| static AlignedMemoryAllocator * | Simd () |
| Allocateur garantissant l'alignement pour utiliser la vectorisation sur la plateforme cible. | |
| static AlignedMemoryAllocator * | CacheLine () |
| Allocateur garantissant l'alignement sur une ligne de cache. | |
Fonctions membres protégées | |
| AlignedMemoryAllocator (Int32 alignment) | |
Attributs privés | |
| size_t | m_alignment |
Attributs privés statiques | |
| static AlignedMemoryAllocator | SimdAllocator |
| static AlignedMemoryAllocator | CacheLineAllocator |
Allocateur mémoire avec alignement mémoire spécifique.
Cette classe s'utilise via les deux méthodes publiques Simd() et CacheLine() qui retournent respectivement un allocateur avec un alignement adéquat pour autoriser la vectorisation et un allocateur aligné sur une ligne de cache.
Définition à la ligne 44 du fichier AlignedMemoryAllocator.h.
|
inlineexplicitprotected |
Définition à la ligne 94 du fichier AlignedMemoryAllocator.h.
|
overridevirtual |
Ajuste la capacité suivant la taille d'élément.
Cette méthode est utilisée pour éventuellement modifié le nombre d'éléments alloués suivant leur taille. Cela permet par exemple pour les allocateurs alignés de garantir que le nombre d'éléments alloués est un multiple de cet alignement.
Implémente Arcane::IMemoryAllocator.
Définition à la ligne 243 du fichier MemoryAllocator.cc.
|
overridevirtual |
NOTE: Normalement les fonctions _mm_alloc() et _mm_free() permettent d'allouer de la mémoire alignée. Il faudrait vérifier si elles sont disponibles partout.
Implémente Arcane::IMemoryAllocator.
Définition à la ligne 146 du fichier MemoryAllocator.cc.
|
inlinestatic |
Allocateur garantissant l'alignement sur une ligne de cache.
Définition à la ligne 87 du fichier AlignedMemoryAllocator.h.
|
inlinestaticconstexpr |
Alignement pour une ligne de cache.
Définition à la ligne 70 du fichier AlignedMemoryAllocator.h.
|
overridevirtual |
Libère la mémoire dont l'adresse de base est ptr.
Le pointeur ptr doit avoir été alloué via l'appel à allocate() ou reallocate() de cette instance.
La sémantique de cette méthode équivalente à free() et donc ptr peut être nul auquel cas aucune opération n'est effectuée.
Implémente Arcane::IMemoryAllocator.
Définition à la ligne 184 du fichier MemoryAllocator.cc.
Références Arcane::AllocatedMemoryInfo::baseAddress().
Voici le graphe d'appel pour cette fonction :
|
inlineoverridevirtual |
Valeur de l'alignement garanti par l'allocateur.
Cette méthode permet de s'assurer qu'un allocateur a un alignement suffisant pour certaines opérations comme la vectorisation par exemple.
S'il n'y a aucune garantie, retourne 0.
Implémente Arcane::IMemoryAllocator.
Définition à la ligne 105 du fichier AlignedMemoryAllocator.h.
|
inlineoverridevirtual |
Indique si l'allocateur supporte la sémantique de realloc.
Les allocateurs par défaut du C (malloc/realloc/free) supportent évidemment le realloc mais ce n'est pas forcément le cas des allocateurs spécifiques avec alignement mémoire (comme par exemple posix_memalign).
Réimplémentée à partir de Arcane::IMemoryAllocator.
Définition à la ligne 100 du fichier AlignedMemoryAllocator.h.
|
inlineoverridevirtual |
Ressource mémoire fournie par l'allocateur.
Réimplémentée à partir de Arcane::IMemoryAllocator.
Réimplémentée dans Arcane::Accelerator::Cuda::DeviceCudaMemoryAllocator, Arcane::Accelerator::Cuda::HostPinnedCudaMemoryAllocator, Arcane::Accelerator::Cuda::UnifiedMemoryCudaMemoryAllocator, Arcane::Accelerator::Hip::DeviceHipMemoryAllocator, Arcane::Accelerator::Hip::HostPinnedHipMemoryAllocator, Arcane::Accelerator::Hip::UnifiedMemoryHipMemoryAllocator, Arcane::Accelerator::Sycl::DeviceSyclMemoryAllocator, Arcane::Accelerator::Sycl::HostPinnedSyclMemoryAllocator, et Arcane::Accelerator::Sycl::UnifiedMemorySyclMemoryAllocator.
Définition à la ligne 106 du fichier AlignedMemoryAllocator.h.
Références Arcane::Host.
|
overridevirtual |
Réalloue de la mémoire pour new_size octets et retourne le pointeur.
Le pointeur current_ptr doit avoir été alloué via l'appel à allocate() ou reallocate() de cette instance.
La sémantique de cette méthode est équivalente à realloc():
Implémente Arcane::IMemoryAllocator.
Définition à la ligne 167 du fichier MemoryAllocator.cc.
Références Arcane::AllocatedMemoryInfo::baseAddress().
Voici le graphe d'appel pour cette fonction :
|
inlinestatic |
Allocateur garantissant l'alignement pour utiliser la vectorisation sur la plateforme cible.
Il s'agit de l'alignement pour le type plus restrictif et donc il est possible d'utiliser cet allocateur pour toutes les structures vectorielles.
Définition à la ligne 79 du fichier AlignedMemoryAllocator.h.
|
inlinestaticconstexpr |
Alignement pour les structures utilisant la vectorisation.
Définition à la ligne 68 du fichier AlignedMemoryAllocator.h.
|
staticprivate |
Définition à la ligne 50 du fichier AlignedMemoryAllocator.h.
|
private |
Définition à la ligne 110 du fichier AlignedMemoryAllocator.h.
|
staticprivate |
Définition à la ligne 49 du fichier AlignedMemoryAllocator.h.