Intrepid2
Public Member Functions | Private Types | Private Attributes | List of all members
Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank > Class Template Reference

Implementation of a general sum factorization algorithm, using a novel approach developed by Roberts, for integration. Uses hierarchical parallelism. More...

#include <Intrepid2_IntegrationToolsDef.hpp>

Public Member Functions

 F_IntegratePointValueCache (Data< Scalar, DeviceType > integralData, TensorData< Scalar, DeviceType > leftComponent, Data< Scalar, DeviceType > composedTransform, TensorData< Scalar, DeviceType > rightComponent, TensorData< Scalar, DeviceType > cellMeasures, int a_offset, int b_offset, int leftFieldOrdinalOffset, int rightFieldOrdinalOffset)
 
template<size_t maxComponents, size_t numComponents = maxComponents>
KOKKOS_INLINE_FUNCTION int incrementArgument (Kokkos::Array< int, maxComponents > &arguments, const Kokkos::Array< int, maxComponents > &bounds) const
 
KOKKOS_INLINE_FUNCTION int incrementArgument (Kokkos::Array< int, Parameters::MaxTensorComponents > &arguments, const Kokkos::Array< int, Parameters::MaxTensorComponents > &bounds, const int &numComponents) const
 runtime-sized variant of incrementArgument; gets used by approximate flop count.
 
template<size_t maxComponents, size_t numComponents = maxComponents>
KOKKOS_INLINE_FUNCTION int nextIncrementResult (const Kokkos::Array< int, maxComponents > &arguments, const Kokkos::Array< int, maxComponents > &bounds) const
 
KOKKOS_INLINE_FUNCTION int nextIncrementResult (const Kokkos::Array< int, Parameters::MaxTensorComponents > &arguments, const Kokkos::Array< int, Parameters::MaxTensorComponents > &bounds, const int &numComponents) const
 runtime-sized variant of nextIncrementResult; gets used by approximate flop count.
 
template<size_t maxComponents, size_t numComponents = maxComponents>
KOKKOS_INLINE_FUNCTION int relativeEnumerationIndex (const Kokkos::Array< int, maxComponents > &arguments, const Kokkos::Array< int, maxComponents > &bounds, const int startIndex) const
 
template<int rank>
KOKKOS_INLINE_FUNCTION enable_if_t< rank==3 &&rank==integralViewRank, Scalar & > integralViewEntry (const IntegralViewType &integralView, const int &cellDataOrdinal, const int &i, const int &j) const
 
template<int rank>
KOKKOS_INLINE_FUNCTION enable_if_t< rank==2 &&rank==integralViewRank, Scalar & > integralViewEntry (const IntegralViewType &integralView, const int &cellDataOrdinal, const int &i, const int &j) const
 
KOKKOS_INLINE_FUNCTION void runSpecialized3 (const TeamMember &teamMember) const
 Hand-coded 3-component version.
 
template<size_t numTensorComponents>
KOKKOS_INLINE_FUNCTION void run (const TeamMember &teamMember) const
 
KOKKOS_INLINE_FUNCTION void operator() (const TeamMember &teamMember) const
 
long approximateFlopCountPerCell () const
 returns an estimate of the number of floating point operations per cell (counting sums, subtractions, divisions, and multiplies, each of which counts as one operation).
 
int teamSize (const int &maxTeamSizeFromKokkos) const
 returns the team size that should be provided to the policy constructor, based on the Kokkos maximum and the amount of thread parallelism we have available.
 
size_t team_shmem_size (int numThreads) const
 Provide the shared memory capacity.
 

Private Types

using ExecutionSpace = typename DeviceType::execution_space
 
using TeamPolicy = Kokkos::TeamPolicy< DeviceType >
 
using TeamMember = typename TeamPolicy::member_type
 
using IntegralViewType = Kokkos::View< typename RankExpander< Scalar, integralViewRank >::value_type, DeviceType >
 

Private Attributes

IntegralViewType integralView_
 
TensorData< Scalar, DeviceType > leftComponent_
 
Data< Scalar, DeviceType > composedTransform_
 
TensorData< Scalar, DeviceType > rightComponent_
 
TensorData< Scalar, DeviceType > cellMeasures_
 
int a_offset_
 
int b_offset_
 
int leftComponentSpan_
 
int rightComponentSpan_
 
int numTensorComponents_
 
int leftFieldOrdinalOffset_
 
int rightFieldOrdinalOffset_
 
size_t fad_size_output_ = 0
 
Kokkos::Array< int, Parameters::MaxTensorComponentsleftFieldBounds_
 
Kokkos::Array< int, Parameters::MaxTensorComponentsrightFieldBounds_
 
Kokkos::Array< int, Parameters::MaxTensorComponentspointBounds_
 
int maxFieldsLeft_
 
int maxFieldsRight_
 
int maxPointCount_
 

Detailed Description

template<class Scalar, class DeviceType, int integralViewRank>
class Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >

Implementation of a general sum factorization algorithm, using a novel approach developed by Roberts, for integration. Uses hierarchical parallelism.

Whereas F_Integrate, and Mora and Demkowicz, and all others we are aware of, cache partial sums at intermediate component levels — the cached values are indexed by component basis ordinals — we integrate the first component in its dimension(s) and store values for integration points in the remaining dimensions, so that our caches are indexed by point ordinals. If there are L_x, L_y, and L_z quadrature points in dimensions x,y,z, we require a cache of size L_y * L_z +1 for a 3D, 3-component integral. The standard approach requires a cache of size (p_x+1)*(p_y+1). So long as one is not over-integrating by too much, these sizes are about the same. The real advantage of our approach here is (we expect) that it improves data locality.

Definition at line 993 of file Intrepid2_IntegrationToolsDef.hpp.

Member Typedef Documentation

◆ ExecutionSpace

template<class Scalar , class DeviceType , int integralViewRank>
using Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::ExecutionSpace = typename DeviceType::execution_space
private

Definition at line 995 of file Intrepid2_IntegrationToolsDef.hpp.

◆ IntegralViewType

template<class Scalar , class DeviceType , int integralViewRank>
using Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::IntegralViewType = Kokkos::View<typename RankExpander<Scalar, integralViewRank>::value_type, DeviceType>
private

Definition at line 999 of file Intrepid2_IntegrationToolsDef.hpp.

◆ TeamMember

template<class Scalar , class DeviceType , int integralViewRank>
using Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::TeamMember = typename TeamPolicy::member_type
private

Definition at line 997 of file Intrepid2_IntegrationToolsDef.hpp.

◆ TeamPolicy

template<class Scalar , class DeviceType , int integralViewRank>
using Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::TeamPolicy = Kokkos::TeamPolicy<DeviceType>
private

Definition at line 996 of file Intrepid2_IntegrationToolsDef.hpp.

Constructor & Destructor Documentation

◆ F_IntegratePointValueCache()

template<class Scalar , class DeviceType , int integralViewRank>
Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::F_IntegratePointValueCache ( Data< Scalar, DeviceType >  integralData,
TensorData< Scalar, DeviceType >  leftComponent,
Data< Scalar, DeviceType >  composedTransform,
TensorData< Scalar, DeviceType >  rightComponent,
TensorData< Scalar, DeviceType >  cellMeasures,
int  a_offset,
int  b_offset,
int  leftFieldOrdinalOffset,
int  rightFieldOrdinalOffset 
)
inline

Definition at line 1025 of file Intrepid2_IntegrationToolsDef.hpp.

Member Function Documentation

◆ approximateFlopCountPerCell()

template<class Scalar , class DeviceType , int integralViewRank>
long Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::approximateFlopCountPerCell ( ) const
inline

returns an estimate of the number of floating point operations per cell (counting sums, subtractions, divisions, and multiplies, each of which counts as one operation).

Definition at line 1587 of file Intrepid2_IntegrationToolsDef.hpp.

References Intrepid2::Data< DataScalar, DeviceType >::extent_int(), and Intrepid2::TensorData< Scalar, DeviceType >::numTensorComponents().

◆ incrementArgument() [1/2]

template<class Scalar , class DeviceType , int integralViewRank>
template<size_t maxComponents, size_t numComponents = maxComponents>
KOKKOS_INLINE_FUNCTION int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::incrementArgument ( Kokkos::Array< int, maxComponents > &  arguments,
const Kokkos::Array< int, maxComponents > &  bounds 
) const
inline

Definition at line 1077 of file Intrepid2_IntegrationToolsDef.hpp.

◆ incrementArgument() [2/2]

template<class Scalar , class DeviceType , int integralViewRank>
KOKKOS_INLINE_FUNCTION int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::incrementArgument ( Kokkos::Array< int, Parameters::MaxTensorComponents > &  arguments,
const Kokkos::Array< int, Parameters::MaxTensorComponents > &  bounds,
const int &  numComponents 
) const
inline

runtime-sized variant of incrementArgument; gets used by approximate flop count.

Definition at line 1094 of file Intrepid2_IntegrationToolsDef.hpp.

◆ integralViewEntry() [1/2]

template<class Scalar , class DeviceType , int integralViewRank>
template<int rank>
KOKKOS_INLINE_FUNCTION enable_if_t< rank==3 &&rank==integralViewRank, Scalar & > Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::integralViewEntry ( const IntegralViewType &  integralView,
const int &  cellDataOrdinal,
const int &  i,
const int &  j 
) const
inline

Definition at line 1165 of file Intrepid2_IntegrationToolsDef.hpp.

◆ integralViewEntry() [2/2]

template<class Scalar , class DeviceType , int integralViewRank>
template<int rank>
KOKKOS_INLINE_FUNCTION enable_if_t< rank==2 &&rank==integralViewRank, Scalar & > Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::integralViewEntry ( const IntegralViewType &  integralView,
const int &  cellDataOrdinal,
const int &  i,
const int &  j 
) const
inline

Definition at line 1173 of file Intrepid2_IntegrationToolsDef.hpp.

◆ nextIncrementResult() [1/2]

template<class Scalar , class DeviceType , int integralViewRank>
template<size_t maxComponents, size_t numComponents = maxComponents>
KOKKOS_INLINE_FUNCTION int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::nextIncrementResult ( const Kokkos::Array< int, maxComponents > &  arguments,
const Kokkos::Array< int, maxComponents > &  bounds 
) const
inline

Definition at line 1112 of file Intrepid2_IntegrationToolsDef.hpp.

◆ nextIncrementResult() [2/2]

template<class Scalar , class DeviceType , int integralViewRank>
KOKKOS_INLINE_FUNCTION int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::nextIncrementResult ( const Kokkos::Array< int, Parameters::MaxTensorComponents > &  arguments,
const Kokkos::Array< int, Parameters::MaxTensorComponents > &  bounds,
const int &  numComponents 
) const
inline

runtime-sized variant of nextIncrementResult; gets used by approximate flop count.

Definition at line 1127 of file Intrepid2_IntegrationToolsDef.hpp.

◆ operator()()

template<class Scalar , class DeviceType , int integralViewRank>
KOKKOS_INLINE_FUNCTION void Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::operator() ( const TeamMember &  teamMember) const
inline

Definition at line 1568 of file Intrepid2_IntegrationToolsDef.hpp.

◆ relativeEnumerationIndex()

template<class Scalar , class DeviceType , int integralViewRank>
template<size_t maxComponents, size_t numComponents = maxComponents>
KOKKOS_INLINE_FUNCTION int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::relativeEnumerationIndex ( const Kokkos::Array< int, maxComponents > &  arguments,
const Kokkos::Array< int, maxComponents > &  bounds,
const int  startIndex 
) const
inline

Definition at line 1143 of file Intrepid2_IntegrationToolsDef.hpp.

◆ run()

template<class Scalar , class DeviceType , int integralViewRank>
template<size_t numTensorComponents>
KOKKOS_INLINE_FUNCTION void Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::run ( const TeamMember &  teamMember) const
inline

Definition at line 1429 of file Intrepid2_IntegrationToolsDef.hpp.

◆ runSpecialized3()

template<class Scalar , class DeviceType , int integralViewRank>
KOKKOS_INLINE_FUNCTION void Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::runSpecialized3 ( const TeamMember &  teamMember) const
inline

◆ team_shmem_size()

template<class Scalar , class DeviceType , int integralViewRank>
size_t Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::team_shmem_size ( int  numThreads) const
inline

Provide the shared memory capacity.

Definition at line 1743 of file Intrepid2_IntegrationToolsDef.hpp.

References Intrepid2::Data< DataScalar, DeviceType >::extent_int().

◆ teamSize()

template<class Scalar , class DeviceType , int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::teamSize ( const int &  maxTeamSizeFromKokkos) const
inline

returns the team size that should be provided to the policy constructor, based on the Kokkos maximum and the amount of thread parallelism we have available.

Definition at line 1734 of file Intrepid2_IntegrationToolsDef.hpp.

Member Data Documentation

◆ a_offset_

template<class Scalar , class DeviceType , int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::a_offset_
private

Definition at line 1005 of file Intrepid2_IntegrationToolsDef.hpp.

◆ b_offset_

template<class Scalar , class DeviceType , int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::b_offset_
private

Definition at line 1006 of file Intrepid2_IntegrationToolsDef.hpp.

◆ cellMeasures_

template<class Scalar , class DeviceType , int integralViewRank>
TensorData<Scalar,DeviceType> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::cellMeasures_
private

Definition at line 1004 of file Intrepid2_IntegrationToolsDef.hpp.

◆ composedTransform_

template<class Scalar , class DeviceType , int integralViewRank>
Data<Scalar,DeviceType> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::composedTransform_
private

Definition at line 1002 of file Intrepid2_IntegrationToolsDef.hpp.

◆ fad_size_output_

template<class Scalar , class DeviceType , int integralViewRank>
size_t Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::fad_size_output_ = 0
private

Definition at line 1013 of file Intrepid2_IntegrationToolsDef.hpp.

◆ integralView_

template<class Scalar , class DeviceType , int integralViewRank>
IntegralViewType Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::integralView_
private

Definition at line 1000 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftComponent_

template<class Scalar , class DeviceType , int integralViewRank>
TensorData<Scalar,DeviceType> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::leftComponent_
private

Definition at line 1001 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftComponentSpan_

template<class Scalar , class DeviceType , int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::leftComponentSpan_
private

Definition at line 1007 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftFieldBounds_

template<class Scalar , class DeviceType , int integralViewRank>
Kokkos::Array<int,Parameters::MaxTensorComponents> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::leftFieldBounds_
private

Definition at line 1017 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftFieldOrdinalOffset_

template<class Scalar , class DeviceType , int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::leftFieldOrdinalOffset_
private

Definition at line 1010 of file Intrepid2_IntegrationToolsDef.hpp.

◆ maxFieldsLeft_

template<class Scalar , class DeviceType , int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::maxFieldsLeft_
private

Definition at line 1021 of file Intrepid2_IntegrationToolsDef.hpp.

◆ maxFieldsRight_

template<class Scalar , class DeviceType , int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::maxFieldsRight_
private

Definition at line 1022 of file Intrepid2_IntegrationToolsDef.hpp.

◆ maxPointCount_

template<class Scalar , class DeviceType , int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::maxPointCount_
private

Definition at line 1023 of file Intrepid2_IntegrationToolsDef.hpp.

◆ numTensorComponents_

template<class Scalar , class DeviceType , int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::numTensorComponents_
private

Definition at line 1009 of file Intrepid2_IntegrationToolsDef.hpp.

◆ pointBounds_

template<class Scalar , class DeviceType , int integralViewRank>
Kokkos::Array<int,Parameters::MaxTensorComponents> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::pointBounds_
private

Definition at line 1019 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightComponent_

template<class Scalar , class DeviceType , int integralViewRank>
TensorData<Scalar,DeviceType> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::rightComponent_
private

Definition at line 1003 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightComponentSpan_

template<class Scalar , class DeviceType , int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::rightComponentSpan_
private

Definition at line 1008 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightFieldBounds_

template<class Scalar , class DeviceType , int integralViewRank>
Kokkos::Array<int,Parameters::MaxTensorComponents> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::rightFieldBounds_
private

Definition at line 1018 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightFieldOrdinalOffset_

template<class Scalar , class DeviceType , int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::rightFieldOrdinalOffset_
private

Definition at line 1011 of file Intrepid2_IntegrationToolsDef.hpp.


The documentation for this class was generated from the following file: