In class HypreParMatrix, use "HypreRead" instead of "HypreReadWrite"
at the end of constructors that use host input.
Add an internal debugging option that prints information from some
memory manager methods, see the define MFEM_TRACK_MEM_MANAGER in
general/mem_manager.cpp.
With a non-CUDA hypre build, 'make test' should work fine.
With a CUDA hypre build:
* Only some tests in 'make test' work.
* 'ex1p' and 'ex2p' should work with "cpu" and "cuda" devices with
any number of processors.
* Most of the other examples and miniapps still need work.
device memory types.
Add a function that checks if a MemoryType is contained in a
given MemoryClass.
Various small additions and tweaks in the hypre*.{h,c}pp files.
Fix warnings in linalg/hypre.hpp
Simplify and fix a warning in GetMinElt in fem/restriction.cpp
Fix a warning in miniapps/navier/navier_tgv.cpp
Fix out-of-source build in miniapps/solvers/makefile
In makefile, do not modify the value of MFEM_HOST_CXX if it
is already defined, e.g. read from config.mk.
before the memory manager configuration) on device with the
"debug" device, tweak the memory manager configuration method
to update the duals of all host memory types (except MANAGED)
to be DEVICE_DEBUG.
Global objects returned by Geometries.GetGeomToPerfGeomJac no
longer need to be copied before they can be used on device
with the "debug" device.
an alias when the 'own_mem' parameter is fasle.
Several simplifications/tweaks related to Vector::NewMemoryAndSize
and Vector::MakeRef in BlockVector, GridFunction, LinearForm, and
ParBlockNonlinearForm.
Add more MFEM_ASSERTs in MemoryManager::Delete_.
Remove MemoryManager::RegisterAliasBases().
In Memory<T>::MakeAlias, register the 'base' when the globally
configured device memory type (which can be a host type, e.g. when
running on host) is a device memory type. Always registering the
'base' creates errors in the unit tests:
"alias already exists with different base/offset!"
which are probably due to dangling aliases. If we want to always
register the 'base', we need to address these errors.
Updated the unit test "MemoryManager/Scopes" to test for the new
behavior of Vector::NewMemoryAndSize.
Disable the unit test "MemoryManager" since it defined a Device
object which destroys the MemoryManager at the end of the test.
'Cannot register an alias!'
The proposed solution is to register the 'base' Memory inside
the call Memory<T>::MakeAlias unless the current device
configuration is not using a device.
Since device allocation is now done lazily, there will be no
unnecessary device allocations.
X and B, use Vector's MakeRef instead of NewMemoryAndSize in the
case when the FE space prolongation is identity.
In MemoryManager::Insert, when re-inserting the same host pointer
allow the new pointer to have d_mt == MemoryType::DEFAULT in the
debug check.
In GridFunction::{MakeRef,MakeTRef} check for identity prolongation
with the method IsIdentityProlongation.
Device::SetDeviceMemoryType() with the method
Device::SetMemoryTypes() which can be called only before
Device configuration.
Added methods MemoryManager::GetDualMemoryType() and
MemoryManager::SetDualMemoryType() where the latter can be
called only before MemoryManager::Configure().
Updated the Memory/MemoryManager implementation to use the
dual memory types instead of the default memory types.
Various other tweaks and fixes in the Memory/MemoryManager
implementation.