alpaka
Abstraction Library for Parallel Kernel Acceleration
WorkDivHelpers.hpp File Reference
#include "alpaka/acc/Traits.hpp"
#include "alpaka/core/Assert.hpp"
#include "alpaka/core/Common.hpp"
#include "alpaka/core/Utility.hpp"
#include "alpaka/dev/Traits.hpp"
#include "alpaka/extent/Traits.hpp"
#include "alpaka/vec/Vec.hpp"
#include "alpaka/workdiv/WorkDivMembers.hpp"
#include <algorithm>
#include <array>
#include <cmath>
#include <functional>
#include <set>
#include <type_traits>

Go to the source code of this file.

Namespaces

 alpaka
 The alpaka accelerator library.
 
 alpaka::detail
 

Enumerations

enum class  alpaka::GridBlockExtentSubDivRestrictions {
  alpaka::EqualExtent ,
  alpaka::CloseToEqualExtent ,
  alpaka::Unrestricted
}
 The grid block extent subdivision restrictions. More...
 

Functions

template<typename T , typename = std::enable_if_t<std::is_integral_v<T>>>
ALPAKA_FN_HOST auto alpaka::detail::allDivisorsLessOrEqual (T const &val, T const &maxDivisor) -> std::set< T >
 
template<typename TAcc , typename TDev , typename TGridElemExtent = Vec<Dim<TAcc>, Idx<TAcc>>, typename TThreadElemExtent = Vec<Dim<TAcc>, Idx<TAcc>>>
ALPAKA_FN_HOST auto alpaka::getValidWorkDiv ([[maybe_unused]] TDev const &dev, [[maybe_unused]] TGridElemExtent const &gridElemExtent=Vec< Dim< TAcc >, Idx< TAcc >>::ones(), [[maybe_unused]] TThreadElemExtent const &threadElemExtents=Vec< Dim< TAcc >, Idx< TAcc >>::ones(), [[maybe_unused]] bool blockThreadMustDivideGridThreadExtent=true, [[maybe_unused]] GridBlockExtentSubDivRestrictions gridBlockExtentSubDivRestrictions=GridBlockExtentSubDivRestrictions::Unrestricted) -> WorkDivMembers< Dim< TGridElemExtent >, Idx< TGridElemExtent >>
 
template<typename TDim , typename TIdx >
ALPAKA_FN_HOST auto alpaka::isValidAccDevProps (AccDevProps< TDim, TIdx > const &accDevProps) -> bool
 
template<typename TDim , typename TIdx , typename TWorkDiv >
ALPAKA_FN_HOST auto alpaka::isValidWorkDiv (AccDevProps< TDim, TIdx > const &accDevProps, TWorkDiv const &workDiv) -> bool
 
template<typename TAcc , typename TDev , typename TWorkDiv >
ALPAKA_FN_HOST auto alpaka::isValidWorkDiv (TDev const &dev, TWorkDiv const &workDiv) -> bool
 
template<typename T , typename = std::enable_if_t<std::is_integral_v<T>>>
ALPAKA_FN_HOST auto alpaka::detail::nextDivisorLowerOrEqual (T const &dividend, T const &maxDivisor) -> T
 Finds the largest divisor where divident % divisor == 0. More...
 
template<typename TDim , typename TIdx >
ALPAKA_FN_HOST auto alpaka::subDivideGridElems (Vec< TDim, TIdx > const &gridElemExtent, Vec< TDim, TIdx > const &threadElemExtent, AccDevProps< TDim, TIdx > const &accDevProps, bool blockThreadMustDivideGridThreadExtent=true, GridBlockExtentSubDivRestrictions gridBlockExtentSubDivRestrictions=GridBlockExtentSubDivRestrictions::Unrestricted) -> WorkDivMembers< TDim, TIdx >
 Subdivides the given grid thread extent into blocks restricted by the maxima allowed. More...