1 #ifndef svtkHAMRDataArray_h 2 #define svtkHAMRDataArray_h 4 #include "senseiConfig.h" 6 #include "hamr_buffer.h" 7 #include "hamr_buffer_allocator.h" 8 #include "hamr_buffer_transfer.h" 9 #include "hamr_stream.h" 11 #include "svtkDataArray.h" 12 #include "svtkAOSDataArrayTemplate.h" 13 #include "svtkCommonCoreModule.h" 18 using svtkAllocator = hamr::buffer_allocator;
19 using svtkStreamMode = hamr::buffer_transfer;
20 using svtkStream = hamr::stream;
23 inline svtkAllocator GetDeviceAllocator() {
return hamr::get_device_allocator(); }
26 inline svtkAllocator GetHostAllocator() {
return hamr::get_host_allocator(); }
29 inline svtkAllocator GetCPUAllocator() {
return hamr::buffer_allocator::malloc; }
66 void PrintSelf(ostream& os, svtkIndent indent)
override;
106 svtkStream stream, svtkStreamMode streamMode);
126 size_t numTuples,
int numComps, svtkAllocator alloc, svtkStream stream,
127 svtkStreamMode streamMode,
int owner,
int take);
142 const std::shared_ptr<T> &data,
size_t numTuples,
int numComps,
143 svtkAllocator alloc, svtkStream stream, svtkStreamMode streamMode,
158 template <
typename deleter_t>
159 static svtkHAMRDataArray *New(
const std::string &name, T *data,
size_t numTuples,
160 int numComps, svtkAllocator alloc, svtkStream stream, svtkStreamMode streamMode,
161 int owner, deleter_t deleter);
178 size_t numTuples,
int numComps, svtkAllocator alloc, svtkStream stream,
179 svtkStreamMode streamMode);
193 size_t numTuples,
int numComps, svtkAllocator alloc, svtkStream stream,
194 svtkStreamMode streamMode,
const T &initVal);
204 void SetData(T *data,
size_t numTuples,
int numComps, svtkAllocator alloc,
205 svtkStream stream, svtkStreamMode streamMode,
int owner);
210 void SetData(
const std::shared_ptr<T> &data,
size_t numTuples,
int numComps,
211 svtkAllocator alloc, svtkStream stream, svtkStreamMode,
int owner);
217 template <
typename deleter_t>
218 void SetData(T *dataPtr,
size_t numTuples,
int numComps,
219 svtkAllocator alloc, svtkStream stream, svtkStreamMode,
220 int owner, deleter_t deleter);
228 std::shared_ptr<const T>
GetHostAccessible()
const {
return this->Data->get_host_accessible(); }
234 std::shared_ptr<const T>
GetCUDAAccessible()
const {
return this->Data->get_cuda_accessible(); }
237 std::shared_ptr<const T>
GetHIPAccessible()
const {
return this->Data->get_hip_accessible(); }
268 int GetOwner()
const {
return this->Data->get_owner(); }
275 this->Data->move(this->GetAllocator());
283 this->Data->move(alloc);
289 return this->Data->get_allocator();
310 void SetStream(
const svtkStream &stream, svtkStreamMode &mode)
312 this->Data->set_stream(stream, mode);
316 svtkStream &
GetStream() {
return this->Data->get_stream(); }
317 const svtkStream &GetStream()
const {
return this->Data->get_stream(); }
331 void SetNumberOfTuples(svtkIdType numTuples)
override;
332 void SetNumberOfTuples(svtkIdType numTuples, svtkAllocator alloc);
335 svtkTypeBool Resize(svtkIdType numTuples)
override;
350 svtkAOSDataArrayTemplate<T> *AsSvtkAOSDataArray(
int zeroCopy);
365 svtkTypeBool Allocate(svtkIdType numValues, svtkIdType ext)
override;
369 int GetDataType()
const override;
371 int GetDataTypeSize()
const override;
373 int GetElementComponentSize()
const override;
375 void SetTuple(svtkIdType dstTupleIdx, svtkIdType srcTupleIdx, svtkAbstractArray* source)
override;
377 void InsertTuple(svtkIdType dstTupleIdx, svtkIdType srcTupleIdx, svtkAbstractArray* source)
override;
379 void InsertTuples(svtkIdList* dstIds, svtkIdList* srcIds, svtkAbstractArray* source)
override;
381 void InsertTuples(svtkIdType dstStart, svtkIdType n, svtkIdType srcStart, svtkAbstractArray* source)
override;
383 svtkIdType InsertNextTuple(svtkIdType srcTupleIdx, svtkAbstractArray* source)
override;
385 void GetTuples(svtkIdList* tupleIds, svtkAbstractArray* output)
override;
387 void GetTuples(svtkIdType p1, svtkIdType p2, svtkAbstractArray* output)
override;
389 bool HasStandardMemoryLayout()
const override;
391 void* GetVoidPointer(svtkIdType valueIdx)
override;
393 void DeepCopy(svtkAbstractArray* da)
override;
395 void InterpolateTuple(svtkIdType dstTupleIdx, svtkIdList* ptIndices, svtkAbstractArray* source,
double* weights)
override;
397 void InterpolateTuple(svtkIdType dstTupleIdx, svtkIdType srcTupleIdx1, svtkAbstractArray* source1, svtkIdType srcTupleIdx2, svtkAbstractArray* source2,
double t)
override;
399 void Squeeze()
override;
401 void SetVoidArray(
void* svtkNotUsed(array), svtkIdType svtkNotUsed(size),
int svtkNotUsed(save))
override;
403 void SetVoidArray(
void* ptr, svtkIdType size,
int save,
int deleteMethod)
override;
405 void SetArrayFreeFunction(
void (*callback)(
void*))
override;
407 void ExportToVoidPointer(
void* out_ptr)
override;
409 unsigned long GetActualMemorySize()
const override;
411 int IsNumeric()
const override;
413 SVTK_NEWINSTANCE svtkArrayIterator* NewIterator()
override;
415 svtkIdType LookupValue(svtkVariant value)
override;
416 void LookupValue(svtkVariant value, svtkIdList* valueIds)
override;
417 svtkVariant GetVariantValue(svtkIdType valueIdx)
override;
419 void InsertVariantValue(svtkIdType valueIdx, svtkVariant value)
override;
421 void SetVariantValue(svtkIdType valueIdx, svtkVariant value)
override;
423 void DataChanged()
override;
425 void ClearLookup()
override;
427 void GetProminentComponentValues(
int comp, svtkVariantArray* values,
double uncertainty = 1.e-6,
double minimumProminence = 1.e-3)
override;
429 int CopyInformation(svtkInformation* infoFrom,
int deep = 1)
override;
431 double* GetTuple(svtkIdType tupleIdx)
override;
433 void GetTuple(svtkIdType tupleIdx,
double* tuple)
override;
435 void SetTuple(svtkIdType tupleIdx,
const float* tuple)
override;
436 void SetTuple(svtkIdType tupleIdx,
const double* tuple)
override;
438 void InsertTuple(svtkIdType tupleIdx,
const float* tuple)
override;
439 void InsertTuple(svtkIdType tupleIdx,
const double* tuple)
override;
441 svtkIdType InsertNextTuple(
const float* tuple)
override;
442 svtkIdType InsertNextTuple(
const double* tuple)
override;
444 void RemoveTuple(svtkIdType tupleIdx)
override;
445 void RemoveFirstTuple()
override { this->RemoveTuple(0); }
446 void RemoveLastTuple()
override;
448 double GetComponent(svtkIdType tupleIdx,
int compIdx)
override;
450 void SetComponent(svtkIdType tupleIdx,
int compIdx,
double value)
override;
452 void InsertComponent(svtkIdType tupleIdx,
int compIdx,
double value)
override;
454 void GetData(svtkIdType tupleMin, svtkIdType tupleMax,
int compMin,
int compMax, svtkDoubleArray* data)
override;
460 void FillComponent(
int compIdx,
double value)
override;
462 void Fill(
double value)
override;
464 void CopyComponent(
int dstComponent,
svtkDataArray* src,
int srcComponent)
override;
466 void* WriteVoidPointer(svtkIdType valueIdx, svtkIdType numValues)
override;
468 double GetMaxNorm()
override;
470 int GetArrayType()
const override;
480 hamr::buffer<T> *Data;
489 #if !defined(SENSEI_SEPARATE_IMPL) 490 #include "svtkHAMRDataArrayImpl.h" void SetOwner()
Set the device id that owns the memory to the currently aactive device.
Definition: svtkHAMRDataArray.h:273
int Initialize(MPI_Comm comm, const std::string &fileName, InTransitDataAdaptor *&dataAdaptor)
Creates a sensei::ConfigurableAnalysis adaptor and sensei::InTransitDataAdaptor based on a SENSEI XML...
std::shared_ptr< const T > GetDeviceAccessible() const
Definition: svtkHAMRDataArray.h:231
bool OpenMPAccessible()
return true if a pooniter to the data is safe to use with OpenMP device off load
Definition: svtkHAMRDataArray.h:302
int GetOwner() const
get the device where the memory was allocated.
Definition: svtkHAMRDataArray.h:268
std::shared_ptr< const T > GetHIPAccessible() const
Definition: svtkHAMRDataArray.h:237
std::shared_ptr< T > GetDataPointer()
fast access to the internally managed memory.
Definition: svtkHAMRDataArray.h:260
svtkAllocator GetAllocator()
Definition: svtkHAMRDataArray.h:287
std::shared_ptr< const T > GetCUDAAccessible() const
Definition: svtkHAMRDataArray.h:234
void Synchronize() const
synchronizes on the internal stream
Definition: svtkHAMRDataArray.h:320
svtkIdType GetNumberOfValues() const override
returns the number of values. this is the current size, not the capacity.
Definition: svtkHAMRDataArray.h:328
bool HIPAccessible()
returns a pointer to the data that is safe to use with HIP
Definition: svtkHAMRDataArray.h:299
An accelerator aware container for array based data.
Definition: svtkHAMRDataArray.h:62
bool CUDAAccessible()
return true if a pooniter to the data is safe to use with CUDA
Definition: svtkHAMRDataArray.h:296
bool HostAccessible()
return true if a pooniter to the data is safe to use on the Host
Definition: svtkHAMRDataArray.h:293
void SetStream(const svtkStream &stream, svtkStreamMode &mode)
sets the stream. mode indicate synchronous behavior or not.
Definition: svtkHAMRDataArray.h:310
void SetAllocator(svtkAllocator alloc)
Sets or changes the allocator used to manage the menory, this may move the data from one device to an...
Definition: svtkHAMRDataArray.h:281
T * GetData()
fast access to the internally managed memory.
Definition: svtkHAMRDataArray.h:253
svtkStream & GetStream()
Definition: svtkHAMRDataArray.h:316
std::shared_ptr< const T > GetOpenMPAccessible() const
Definition: svtkHAMRDataArray.h:240
std::shared_ptr< const T > GetHostAccessible() const
Definition: svtkHAMRDataArray.h:228