Skip to content

Commit f5b888b

Browse files
[arcane,utils] Ajoute function pour retourner le 'eMemoryResource' à partir de son nom.
1 parent a5985b4 commit f5b888b

File tree

3 files changed

+63
-1
lines changed

3 files changed

+63
-1
lines changed

arcane/src/arcane/utils/MemoryUtils.cc

+26-1
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313

1414
#include "arcane/utils/MemoryUtils.h"
1515

16-
#include "arcane/utils/PlatformUtils.h"
16+
#include "arcane/utils/FatalErrorException.h"
1717
#include "arcane/utils/MemoryAllocator.h"
1818
#include "arcane/utils/IMemoryRessourceMng.h"
19+
#include "arcane/utils/String.h"
1920
#include "arcane/utils/internal/IMemoryRessourceMngInternal.h"
2021
#include "arcane/utils/internal/MemoryUtilsInternal.h"
2122
#include "arcane/utils/internal/MemoryResourceMng.h"
@@ -55,6 +56,30 @@ setDefaultDataMemoryResource(eMemoryResource v)
5556
/*---------------------------------------------------------------------------*/
5657
/*---------------------------------------------------------------------------*/
5758

59+
eMemoryResource MemoryUtils::
60+
getMemoryResourceFromName(const String& name)
61+
{
62+
eMemoryResource v = eMemoryResource::Unknown;
63+
if (name.null())
64+
return v;
65+
if (name == "Device")
66+
v = eMemoryResource::Device;
67+
else if (name == "Host")
68+
v = eMemoryResource::Host;
69+
else if (name == "HostPinned")
70+
v = eMemoryResource::HostPinned;
71+
else if (name == "UnifiedMemory")
72+
v = eMemoryResource::UnifiedMemory;
73+
else
74+
ARCANE_FATAL("Invalid name '{0}' for memory resource. Valid names are "
75+
"'Device', 'Host', 'HostPinned' or 'UnifieMemory'.",
76+
name);
77+
return v;
78+
}
79+
80+
/*---------------------------------------------------------------------------*/
81+
/*---------------------------------------------------------------------------*/
82+
5883
IMemoryRessourceMng* MemoryUtils::
5984
setDataMemoryResourceMng(IMemoryRessourceMng* mng)
6085
{

arcane/src/arcane/utils/MemoryUtils.h

+14
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,20 @@ namespace Arcane::MemoryUtils
4040
extern "C++" ARCANE_UTILS_EXPORT eMemoryResource
4141
getDefaultDataMemoryResource();
4242

43+
/*---------------------------------------------------------------------------*/
44+
/*---------------------------------------------------------------------------*/
45+
/*!
46+
* \brief Retourne la ressource mémoire par son nom.
47+
*
48+
* Le nom correspond au nom de la valeur de l'énumération (par exemple
49+
* 'Device' pour eMemoryResource::Device.
50+
*
51+
* Si \a name est nul, retourn eMemoryResource::Unknown.
52+
* Si \a name ne correspondant pas à une valeur valide, lève une exception.
53+
*/
54+
extern "C++" ARCANE_UTILS_EXPORT eMemoryResource
55+
getMemoryResourceFromName(const String& name);
56+
4357
/*---------------------------------------------------------------------------*/
4458
/*---------------------------------------------------------------------------*/
4559
/*!

arcane/src/arcane/utils/tests/TestMemory.cc

+23
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "arcane/utils/Exception.h"
1313
#include "arcane/utils/MemoryUtils.h"
1414
#include "arcane/utils/NumericTypes.h"
15+
#include "arcane/utils/internal/MemoryUtilsInternal.h"
1516

1617
#include <random>
1718

@@ -173,6 +174,28 @@ TEST(Memory, Basic)
173174
}
174175
}
175176

177+
/*---------------------------------------------------------------------------*/
178+
/*---------------------------------------------------------------------------*/
179+
namespace
180+
{
181+
void _checkSetDataMemoryResource(const String& name, eMemoryResource expected_mem_resource)
182+
{
183+
eMemoryResource v = MemoryUtils::getMemoryResourceFromName(name);
184+
ASSERT_EQ(v, expected_mem_resource);
185+
MemoryUtils::setDefaultDataMemoryResource(v);
186+
eMemoryResource v2 = MemoryUtils::getDefaultDataMemoryResource();
187+
ASSERT_EQ(v2, expected_mem_resource);
188+
}
189+
} // namespace
190+
191+
TEST(Memory, Allocator)
192+
{
193+
_checkSetDataMemoryResource("Device", eMemoryResource::Device);
194+
_checkSetDataMemoryResource("HostPinned", eMemoryResource::HostPinned);
195+
_checkSetDataMemoryResource("Host", eMemoryResource::Host);
196+
_checkSetDataMemoryResource("UnifiedMemory", eMemoryResource::UnifiedMemory);
197+
}
198+
176199
/*---------------------------------------------------------------------------*/
177200
/*---------------------------------------------------------------------------*/
178201

0 commit comments

Comments
 (0)