Arcane  v4.1.2.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
TestMemoryPool.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7
8#include <gtest/gtest.h>
9
10#include "arccore/common/internal/MemoryPool.h"
11#include "arccore/common/internal/MemoryResourceMng.h"
12#include "arccore/common/internal/MemoryUtilsInternal.h"
14#include "arcane/utils/String.h"
15
16/*---------------------------------------------------------------------------*/
17/*---------------------------------------------------------------------------*/
18
19using namespace Arcane;
20using namespace Arcane::Impl;
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
27{
28 void* allocateMemory(size_t size) override { return std::malloc(size); }
29 void freeMemory(void* address,size_t) override { std::free(address); }
30};
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35TEST(MemoryPool, Misc)
36{
37 MyMemoryPoolAllocator my_allocator;
38 MemoryPool memory_pool(&my_allocator, "MyMemoryPool");
39 size_t max_block_size = 1024 * 8;
40 memory_pool.setMaxCachedBlockSize(1024 * 8);
41
42 void* a1 = memory_pool.allocateMemory(25);
43 void* a2 = memory_pool.allocateMemory(47);
44 memory_pool.freeMemory(a1, 25);
45 memory_pool.freeMemory(a2, 47);
46 void* a3 = memory_pool.allocateMemory(25);
47 memory_pool.dumpStats(std::cout);
48 memory_pool.dumpFreeMap(std::cout);
49 memory_pool.freeMemory(a3, 25);
50
51 void* a4 = memory_pool.allocateMemory(max_block_size * 2);
52 memory_pool.freeMemory(a4, max_block_size * 2);
53
54 std::cout << "End Of Test\n";
55 memory_pool.dumpStats(std::cout);
56 memory_pool.dumpFreeMap(std::cout);
57 memory_pool.freeCachedMemory();
58}
59
60TEST(MemoryPool, ResourceMng)
61{
62 MyMemoryPoolAllocator my_allocator;
63 MemoryResourceMng resource_mng;
64 MemoryPool memory_pool(&my_allocator, "MyMemoryPool");
65 IMemoryPool* memory_pool_ptr = &memory_pool;
66 resource_mng.setMemoryPool(eMemoryResource::Host, memory_pool_ptr);
69 ASSERT_EQ(p, memory_pool_ptr);
70}
71
72/*---------------------------------------------------------------------------*/
73/*---------------------------------------------------------------------------*/
Fonctions utilitaires de gestion mémoire.
Interface d'un pool mémoire.
Definition IMemoryPool.h:31
Interface d'un allocateur pour un MemoryPool.
Definition MemoryPool.h:39
Classe pour gérer une liste de zones allouées.
Definition MemoryPool.h:66
Gestion des ressources mémoire pour les CPU et accélérateurs.
void setMemoryPool(eMemoryResource r, IMemoryPool *pool) override
Positionne le pool mémoire pour la ressource r.
void freeMemory(void *address, size_t) override
Libère le bloc situé à l'adresse address contenant size octets.
void * allocateMemory(size_t size) override
Alloue un bloc pour size octets.
ARCCORE_COMMON_EXPORT IMemoryRessourceMng * setDataMemoryResourceMng(IMemoryRessourceMng *mng)
Positionne le gestionnaire de ressource mémoire pour les données.
ARCCORE_COMMON_EXPORT IMemoryPool * getMemoryPoolOrNull(eMemoryResource mem_resource)
Pool mémoire pour la ressource mem_resource.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
@ Host
Alloue sur l'hôte.