Interface d'un allocateur pour la mémoire. Plus de détails...
Fonctions membres publiques | |
virtual | ~IMemoryAllocator ()=default |
Détruit l'allocateur. | |
virtual bool | hasRealloc (MemoryAllocationArgs args) const |
Indique si l'allocateur supporte la sémantique de realloc. | |
virtual AllocatedMemoryInfo | allocate (MemoryAllocationArgs args, Int64 new_size) |
Alloue de la mémoire pour new_size octets et retourne le pointeur. | |
virtual AllocatedMemoryInfo | reallocate (MemoryAllocationArgs args, AllocatedMemoryInfo current_ptr, Int64 new_size) |
Réalloue de la mémoire pour new_size octets et retourne le pointeur. | |
virtual void | deallocate (MemoryAllocationArgs args, AllocatedMemoryInfo ptr) |
Libère la mémoire dont l'adresse de base est ptr. | |
virtual Int64 | adjustedCapacity (MemoryAllocationArgs args, Int64 wanted_capacity, Int64 element_size) const |
Ajuste la capacité suivant la taille d'élément. | |
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. | |
virtual bool | hasRealloc () const =0 |
virtual void * | allocate (size_t new_size)=0 |
virtual void * | reallocate (void *current_ptr, size_t new_size)=0 |
virtual void | deallocate (void *ptr)=0 |
virtual size_t | adjustCapacity (size_t wanted_capacity, size_t element_size)=0 |
virtual size_t | guarantedAlignment ()=0 |
Interface d'un allocateur pour la mémoire.
Cette classe définit une interface pour l'allocation mémoire utilisée par les classes tableaux de Arccore (Array, UniqueArray).
Une instance de cette classe doit rester valide tant qu'il existe des tableaux l'utilisant. Comme l'allocateur est transféré lors des copies, il est préférable que les allocateurs soient des objets statiques qui dont la durée de vie est celle du programme.
Les allocateurs n'ont pas d'état modifiables spécifiques et doivent fonctionner en multi-threading.
Depuis la version 2.3 de Arccore, les méthodes sans MemoryAllocationArgs sont obsolètes.
Définition à la ligne 44 du fichier arccore/src/collections/arccore/collections/IMemoryAllocator.h.
|
virtualdefault |
Détruit l'allocateur.
Les objets alloués par l'allocateur doivent tous avoir été désalloués.
|
virtual |
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.
Réimplémentée dans Arccore::IMemoryAllocator3, Arcane::Accelerator::Cuda::CudaMemoryAllocatorBase, Arccore::AlignedMemoryAllocator3, TesterMemoryAllocatorV3, et Arccore::DefaultMemoryAllocator3.
Définition à la ligne 427 du fichier MemoryAllocator.cc.
|
virtual |
Alloue de la mémoire pour new_size octets et retourne le pointeur.
La sémantique est équivalent à malloc():
Réimplémentée dans Arccore::DefaultMemoryAllocator, Arccore::DefaultMemoryAllocator3, Arccore::AlignedMemoryAllocator, Arccore::AlignedMemoryAllocator3, Arccore::PrintableMemoryAllocator, Arcane::Accelerator::Cuda::CudaMemoryAllocatorBase, Arcane::Accelerator::Hip::HipMemoryAllocatorBase, Arcane::Accelerator::Sycl::SyclMemoryAllocatorBase, Arccore::AlignedMemoryAllocator3, TesterMemoryAllocatorV3, Arccore::IMemoryAllocator3, et Arccore::DefaultMemoryAllocator3.
Définition à la ligne 409 du fichier MemoryAllocator.cc.
Références allocate().
Référencé par allocate().
|
virtual |
Copie la mémoire entre deux zones.
L'implémentation par défaut utilise std::memcpy().
args | arguments de la zone mémoire |
destination | destination de la copie |
destination | source de la copie |
Définition à la ligne 60 du fichier MemoryAllocator.cc.
Références Arccore::AllocatedMemoryInfo::baseAddress().
|
virtual |
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.
Réimplémentée dans Arcane::Accelerator::Cuda::CudaMemoryAllocatorBase, Arccore::DefaultMemoryAllocator, Arccore::DefaultMemoryAllocator3, Arccore::AlignedMemoryAllocator, Arccore::AlignedMemoryAllocator3, Arccore::PrintableMemoryAllocator, Arcane::Accelerator::Hip::HipMemoryAllocatorBase, Arcane::Accelerator::Sycl::SyclMemoryAllocatorBase, Arccore::AlignedMemoryAllocator3, TesterMemoryAllocatorV3, Arccore::IMemoryAllocator3, et Arccore::DefaultMemoryAllocator3.
Définition à la ligne 421 du fichier MemoryAllocator.cc.
Références Arccore::AllocatedMemoryInfo::baseAddress(), et deallocate().
Référencé par deallocate().
|
virtual |
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.
Réimplémentée dans Arccore::DefaultMemoryAllocator, Arccore::DefaultMemoryAllocator3, Arccore::AlignedMemoryAllocator, Arccore::AlignedMemoryAllocator3, Arccore::IMemoryAllocator3, TesterMemoryAllocatorV3, Arccore::DefaultMemoryAllocator3, et Arccore::AlignedMemoryAllocator3.
Définition à la ligne 434 du fichier MemoryAllocator.cc.
Références guarantedAlignment().
Référencé par guarantedAlignment().
|
pure virtual |
Implémenté dans Arccore::AlignedMemoryAllocator.
|
virtual |
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 dans Arccore::DefaultMemoryAllocator, Arccore::DefaultMemoryAllocator3, Arccore::AlignedMemoryAllocator, Arccore::AlignedMemoryAllocator3, TesterMemoryAllocatorV3, Arccore::IMemoryAllocator3, Arcane::Accelerator::Cuda::CudaMemoryAllocatorBase, Arcane::Accelerator::Hip::HipMemoryAllocatorBase, Arcane::Accelerator::Sycl::SyclMemoryAllocatorBase, Arccore::DefaultMemoryAllocator3, et Arccore::AlignedMemoryAllocator3.
Définition à la ligne 403 du fichier MemoryAllocator.cc.
Références hasRealloc().
Référencé par hasRealloc().
|
virtual |
Notifie du changement des arguments spécifiques à l'instance.
ptr | zone mémoire allouée |
old_args | ancienne valeur des arguments |
new_args | nouvelle valeur des arguments |
Réimplémentée dans Arcane::Accelerator::Cuda::UnifiedMemoryCudaMemoryAllocator, et TesterMemoryAllocatorV3.
Définition à la ligne 52 du fichier MemoryAllocator.cc.
Référencé par TesterMemoryAllocatorV3::notifyMemoryArgsChanged().
|
virtual |
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():
Réimplémentée dans Arcane::Accelerator::Cuda::CudaMemoryAllocatorBase, Arccore::DefaultMemoryAllocator, Arccore::DefaultMemoryAllocator3, Arccore::AlignedMemoryAllocator, Arccore::AlignedMemoryAllocator3, Arccore::PrintableMemoryAllocator, Arcane::Accelerator::Hip::HipMemoryAllocatorBase, Arcane::Accelerator::Sycl::SyclMemoryAllocatorBase, Arccore::AlignedMemoryAllocator3, TesterMemoryAllocatorV3, Arccore::IMemoryAllocator3, et Arccore::DefaultMemoryAllocator3.
Définition à la ligne 415 du fichier MemoryAllocator.cc.
Références Arccore::AllocatedMemoryInfo::baseAddress(), et reallocate().
Référencé par reallocate().