MFEM
v4.1.0
Finite element discretization library
|
The MFEM Device class abstracts hardware devices such as GPUs, as well as programming models such as CUDA, OCCA, RAJA and OpenMP. More...
#include <device.hpp>
Public Member Functions | |
Device () | |
Default constructor. Unless Configure() is called later, the default Backend::CPU will be used. More... | |
Device (const std::string &device, const int dev=0) | |
Construct a Device and configure it based on the device string. See Configure() for more details. More... | |
~Device () | |
Destructor. More... | |
void | Configure (const std::string &device, const int dev=0) |
Configure the Device backends. More... | |
void | Print (std::ostream &out=mfem::out) |
Print the configuration of the MFEM virtual device object. More... | |
Static Public Member Functions | |
static bool | IsConfigured () |
Return true if Configure() has been called previously. More... | |
static bool | IsAvailable () |
Return true if an actual device (e.g. GPU) has been configured. More... | |
static bool | IsEnabled () |
Return true if any backend other than Backend::CPU is enabled. More... | |
static bool | IsDisabled () |
The opposite of IsEnabled(). More... | |
static bool | Allows (unsigned long b_mask) |
Return true if any of the backends in the backend mask, b_mask, are allowed. More... | |
static MemoryType | GetHostMemoryType () |
Get the current Host MemoryType. This is the MemoryType used by most MFEM classes when allocating memory used on the host. More... | |
static MemoryClass | GetHostMemoryClass () |
Get the current Host MemoryClass. This is the MemoryClass used by most MFEM host Memory objects. More... | |
static MemoryType | GetDeviceMemoryType () |
Get the current Device MemoryType. This is the MemoryType used by most MFEM classes when allocating memory to be used with device kernels. More... | |
static MemoryType | GetMemoryType () |
(DEPRECATED) Equivalent to GetDeviceMemoryType(). More... | |
static MemoryClass | GetDeviceMemoryClass () |
Get the current Device MemoryClass. This is the MemoryClass used by most MFEM device kernels to access Memory objects. More... | |
static MemoryClass | GetMemoryClass () |
(DEPRECATED) Equivalent to GetDeviceMemoryClass(). More... | |
static void | SetGPUAwareMPI (const bool force=true) |
static bool | GetGPUAwareMPI () |
Friends | |
class | MemoryManager |
The MFEM Device class abstracts hardware devices such as GPUs, as well as programming models such as CUDA, OCCA, RAJA and OpenMP.
This class represents a "virtual device" with the following properties:
Definition at line 114 of file device.hpp.
mfem::Device::Device | ( | ) |
Default constructor. Unless Configure() is called later, the default Backend::CPU will be used.
Definition at line 65 of file device.cpp.
|
inline |
Construct a Device and configure it based on the device string. See Configure() for more details.
Definition at line 175 of file device.hpp.
mfem::Device::~Device | ( | ) |
Destructor.
Definition at line 150 of file device.cpp.
|
inlinestatic |
Return true if any of the backends in the backend mask, b_mask, are allowed.
This method can be used with any of the Backend::Id constants, the Backend::*_MASK, or combinations of those.
Definition at line 234 of file device.hpp.
void mfem::Device::Configure | ( | const std::string & | device, |
const int | dev = 0 |
||
) |
Configure the Device backends.
The string parameter device must be a comma-separated list of backend string names (see below). The dev argument specifies the ID of the actual devices (e.g. GPU) to use. The available backends are described by the Backend class. The string name of a backend is the lowercase version of the Backend::Id enumeration constant with '_' replaced by '-', e.g. the string name of 'RAJA_CPU' is 'raja-cpu'. The 'cpu' backend is always enabled with lowest priority. The current backend priority from highest to lowest is: 'ceed-cuda', 'occa-cuda', 'raja-cuda', 'cuda', 'hip', 'debug', 'occa-omp', 'raja-omp', 'omp', 'ceed-cpu', 'occa-cpu', 'raja-cpu', 'cpu'. Multiple backends can be configured at the same time. Only one 'occa-*' backend can be configured at a time. The backend 'occa-cuda' enables the 'cuda' backend unless 'raja-cuda' is already enabled. The backend 'ceed-cpu' delegates to a libCEED CPU backend the setup and evaluation of the operator. The backend 'ceed-cuda' delegates to a libCEED CUDA backend the setup and evaluation of the operator and enables the 'cuda' backend to avoid transfer between host and device. The 'debug' backend should not be combined with other device backends.
Definition at line 170 of file device.cpp.
|
inlinestatic |
Get the current Device MemoryClass. This is the MemoryClass used by most MFEM device kernels to access Memory objects.
Definition at line 257 of file device.hpp.
|
inlinestatic |
Get the current Device MemoryType. This is the MemoryType used by most MFEM classes when allocating memory to be used with device kernels.
Definition at line 249 of file device.hpp.
|
inlinestatic |
Definition at line 266 of file device.hpp.
|
inlinestatic |
Get the current Host MemoryClass. This is the MemoryClass used by most MFEM host Memory objects.
Definition at line 244 of file device.hpp.
|
inlinestatic |
Get the current Host MemoryType. This is the MemoryType used by most MFEM classes when allocating memory used on the host.
Definition at line 240 of file device.hpp.
|
inlinestatic |
(DEPRECATED) Equivalent to GetDeviceMemoryClass().
Definition at line 261 of file device.hpp.
|
inlinestatic |
(DEPRECATED) Equivalent to GetDeviceMemoryType().
Definition at line 253 of file device.hpp.
|
inlinestatic |
Return true if an actual device (e.g. GPU) has been configured.
Definition at line 222 of file device.hpp.
|
inlinestatic |
Return true if Configure() has been called previously.
Definition at line 219 of file device.hpp.
|
inlinestatic |
The opposite of IsEnabled().
Definition at line 228 of file device.hpp.
|
inlinestatic |
Return true if any backend other than Backend::CPU is enabled.
Definition at line 225 of file device.hpp.
void mfem::Device::Print | ( | std::ostream & | out = mfem::out | ) |
Print the configuration of the MFEM virtual device object.
Definition at line 236 of file device.cpp.
|
inlinestatic |
Definition at line 263 of file device.hpp.
|
friend |
Definition at line 117 of file device.hpp.