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

Implementation of a general sum factorization algorithm, abstracted from the algorithm described by Mora and Demkowicz, for integration. Uses hierarchical parallelism. More...

#include <Intrepid2_IntegrationToolsDef.hpp>

Public Member Functions

 F_Integrate (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, bool forceNonSpecialized)
 
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
 
KOKKOS_INLINE_FUNCTION void runSpecialized3 (const TeamMember &teamMember) const
 runSpecialized implementations are hand-coded variants of run() for a particular number of components. To allow comparisons with the generic implementation (both in terms of performance and for verification), we use the member variable forceNonSpecialized_ to determine whether runSpecialized is selected when a specialized implementation is available.
 
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 team_size) const
 Provide the shared memory capacity.
 

Private Types

using ExecutionSpace = typename DeviceType::execution_space
 
using TeamPolicy = Kokkos::TeamPolicy< ExecutionSpace >
 
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_
 
bool forceNonSpecialized_
 
size_t fad_size_output_ = 0
 
Kokkos::Array< int, 7 > offsetsForComponentOrdinal_
 
Kokkos::Array< int, Parameters::MaxTensorComponentsleftFieldBounds_
 
Kokkos::Array< int, Parameters::MaxTensorComponentsrightFieldBounds_
 
Kokkos::Array< int, Parameters::MaxTensorComponentspointBounds_
 
Kokkos::Array< int, Parameters::MaxTensorComponentsleftFieldRelativeEnumerationSpans_
 
Kokkos::Array< int, Parameters::MaxTensorComponentsrightFieldRelativeEnumerationSpans_
 
int maxFieldsLeft_
 
int maxFieldsRight_
 
int maxPointCount_
 

Detailed Description

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

Implementation of a general sum factorization algorithm, abstracted from the algorithm described by Mora and Demkowicz, for integration. Uses hierarchical parallelism.

Definition at line 32 of file Intrepid2_IntegrationToolsDef.hpp.

Member Typedef Documentation

◆ ExecutionSpace

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

Definition at line 34 of file Intrepid2_IntegrationToolsDef.hpp.

◆ IntegralViewType

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

Definition at line 38 of file Intrepid2_IntegrationToolsDef.hpp.

◆ TeamMember

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

Definition at line 36 of file Intrepid2_IntegrationToolsDef.hpp.

◆ TeamPolicy

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

Definition at line 35 of file Intrepid2_IntegrationToolsDef.hpp.

Constructor & Destructor Documentation

◆ F_Integrate()

template<class Scalar , class DeviceType , int integralViewRank>
Intrepid2::Impl::F_Integrate< Scalar, DeviceType, integralViewRank >::F_Integrate ( 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,
bool  forceNonSpecialized 
)
inline

Definition at line 70 of file Intrepid2_IntegrationToolsDef.hpp.

Member Function Documentation

◆ approximateFlopCountPerCell()

template<class Scalar , class DeviceType , int integralViewRank>
long Intrepid2::Impl::F_Integrate< 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 871 of file Intrepid2_IntegrationToolsDef.hpp.

References Intrepid2::Data< DataScalar, DeviceType >::extent_int(), Intrepid2::TensorData< Scalar, DeviceType >::extent_int(), Intrepid2::TensorData< Scalar, DeviceType >::getTensorComponent(), 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_Integrate< Scalar, DeviceType, integralViewRank >::incrementArgument ( Kokkos::Array< int, maxComponents > &  arguments,
const Kokkos::Array< int, maxComponents > &  bounds 
) const
inline

Definition at line 155 of file Intrepid2_IntegrationToolsDef.hpp.

◆ incrementArgument() [2/2]

template<class Scalar , class DeviceType , int integralViewRank>
KOKKOS_INLINE_FUNCTION int Intrepid2::Impl::F_Integrate< 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 178 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_Integrate< Scalar, DeviceType, integralViewRank >::nextIncrementResult ( const Kokkos::Array< int, maxComponents > &  arguments,
const Kokkos::Array< int, maxComponents > &  bounds 
) const
inline

Definition at line 196 of file Intrepid2_IntegrationToolsDef.hpp.

◆ nextIncrementResult() [2/2]

template<class Scalar , class DeviceType , int integralViewRank>
KOKKOS_INLINE_FUNCTION int Intrepid2::Impl::F_Integrate< 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 217 of file Intrepid2_IntegrationToolsDef.hpp.

◆ operator()()

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

Definition at line 847 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_Integrate< Scalar, DeviceType, integralViewRank >::relativeEnumerationIndex ( const Kokkos::Array< int, maxComponents > &  arguments,
const Kokkos::Array< int, maxComponents > &  bounds,
const int  startIndex 
) const
inline

Definition at line 233 of file Intrepid2_IntegrationToolsDef.hpp.

◆ run()

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

Definition at line 570 of file Intrepid2_IntegrationToolsDef.hpp.

◆ runSpecialized3()

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

runSpecialized implementations are hand-coded variants of run() for a particular number of components. To allow comparisons with the generic implementation (both in terms of performance and for verification), we use the member variable forceNonSpecialized_ to determine whether runSpecialized is selected when a specialized implementation is available.

Definition at line 266 of file Intrepid2_IntegrationToolsDef.hpp.

References Intrepid2::Data< DataScalar, DeviceType >::extent_int(), Intrepid2::TensorData< Scalar, DeviceType >::getTensorComponent(), Intrepid2::Data< DataScalar, DeviceType >::getUnderlyingView2(), Intrepid2::Data< DataScalar, DeviceType >::getUnderlyingView4(), Intrepid2::Data< DataScalar, DeviceType >::rank(), and Intrepid2::Data< DataScalar, DeviceType >::underlyingMatchesLogical().

◆ team_shmem_size()

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

Provide the shared memory capacity.

Definition at line 958 of file Intrepid2_IntegrationToolsDef.hpp.

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

◆ teamSize()

template<class Scalar , class DeviceType , int integralViewRank>
int Intrepid2::Impl::F_Integrate< 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 950 of file Intrepid2_IntegrationToolsDef.hpp.

Member Data Documentation

◆ a_offset_

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

Definition at line 44 of file Intrepid2_IntegrationToolsDef.hpp.

◆ b_offset_

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

Definition at line 45 of file Intrepid2_IntegrationToolsDef.hpp.

◆ cellMeasures_

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

Definition at line 43 of file Intrepid2_IntegrationToolsDef.hpp.

◆ composedTransform_

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

Definition at line 41 of file Intrepid2_IntegrationToolsDef.hpp.

◆ fad_size_output_

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

Definition at line 53 of file Intrepid2_IntegrationToolsDef.hpp.

◆ forceNonSpecialized_

template<class Scalar , class DeviceType , int integralViewRank>
bool Intrepid2::Impl::F_Integrate< Scalar, DeviceType, integralViewRank >::forceNonSpecialized_
private

Definition at line 51 of file Intrepid2_IntegrationToolsDef.hpp.

◆ integralView_

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

Definition at line 39 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftComponent_

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

Definition at line 40 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftComponentSpan_

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

Definition at line 46 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftFieldBounds_

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

Definition at line 59 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftFieldOrdinalOffset_

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

Definition at line 49 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftFieldRelativeEnumerationSpans_

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

Definition at line 63 of file Intrepid2_IntegrationToolsDef.hpp.

◆ maxFieldsLeft_

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

Definition at line 66 of file Intrepid2_IntegrationToolsDef.hpp.

◆ maxFieldsRight_

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

Definition at line 67 of file Intrepid2_IntegrationToolsDef.hpp.

◆ maxPointCount_

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

Definition at line 68 of file Intrepid2_IntegrationToolsDef.hpp.

◆ numTensorComponents_

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

Definition at line 48 of file Intrepid2_IntegrationToolsDef.hpp.

◆ offsetsForComponentOrdinal_

template<class Scalar , class DeviceType , int integralViewRank>
Kokkos::Array<int, 7> Intrepid2::Impl::F_Integrate< Scalar, DeviceType, integralViewRank >::offsetsForComponentOrdinal_
private

Definition at line 55 of file Intrepid2_IntegrationToolsDef.hpp.

◆ pointBounds_

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

Definition at line 61 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightComponent_

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

Definition at line 42 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightComponentSpan_

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

Definition at line 47 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightFieldBounds_

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

Definition at line 60 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightFieldOrdinalOffset_

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

Definition at line 50 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightFieldRelativeEnumerationSpans_

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

Definition at line 64 of file Intrepid2_IntegrationToolsDef.hpp.


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