* class Memory; some methods were still using int for sizes
* class Vector, for size and indexing
* all 1D "forall" macros and function templates
- HIP cannot launch kernels with >= 2^32 total threads
- CUDA seems to support kernel launches with >= 2^32 total threads
* class DeviceTensor; individual dimensions still use int, however, the
total 1D index computation uses bigint
* element and face geometric factors use bigint sizes for memory allocations
Left some FIXME comments to be addressed later.
This adds some convenience constructors for NURBS patches, and also includes a test exercising the new functionality.
Co-authored-by: Derek Thomas <derek@coreform.com>
Co-authored-by: Kevin Tew <kevin@coreform.com>
Co-authored-by: David Kamensky <david@coreform.com>
Co-authored-by: Justin Laughlin <laughlin6@llnl.gov>
and transfers.
The Memory class is now used by some MFEM classes (like Array and
Vector) which can be used on the Device. Such classes now provide
methods to access the underlying Memory object, e.g. GetMemory.
Updated ex1/ex1p and ex6/ex6p to not need to enable/disable the
Device at specific points -- the Device is now enabled just at the
start. Also, the same examples can now run on Device (e.g. -d cuda)
without the partial assembly option (-pa) -- full assembly will
be still done on CPU but the sparse matrix action and vector
operations will be done using the Device.
Reverted changes in class DenseMatrix related to using the Device.
At this point, DenseMatrix operations are only used for small matrices
and using the Device in this case is not a good option.
This matches the names of the functions in mm:: and also more closely
matches their use in the rest of mfem.
Also removed the template parameter for mm::free since it is not needed.
It is possible in the future to add equivalents of new and delete to the
mm class (with different names since those are keywords) in case it is
desirable to call the constructor and destructor.