#include <NonuniformGeneratedGPUPdfPackInfo.h>
Public Types | |
using | LatticeStorageSpecification_T = typename PdfField_T::LatticeStorageSpecification |
using | Stencil = typename LatticeStorageSpecification_T::Stencil |
using | CommunicationStencil = typename LatticeStorageSpecification_T::CommunicationStencil |
using | CommData_T = NonuniformGPUCommData< LatticeStorageSpecification_T > |
Public Member Functions | |
NonuniformGeneratedGPUPdfPackInfo (const BlockDataID pdfFieldID, const BlockDataID commDataID) | |
bool | constantDataExchange () const override |
bool | threadsafeReceiving () const override |
void | unpackDataEqualLevel (Block *receiver, Direction dir, GpuBuffer_T &buffer, gpuStream_t stream) override |
Equal Level. More... | |
void | communicateLocalEqualLevel (const Block *sender, Block *receiver, stencil::Direction dir, gpuStream_t stream) override |
void | unpackDataCoarseToFine (Block *fineReceiver, const BlockID &coarseSender, stencil::Direction dir, GpuBuffer_T &buffer, gpuStream_t stream) override |
Coarse to Fine. More... | |
void | communicateLocalCoarseToFine (const Block *coarseSender, Block *fineReceiver, stencil::Direction dir, gpuStream_t stream) override |
void | communicateLocalCoarseToFine (const Block *coarseSender, Block *fineReceiver, stencil::Direction dir, GpuBuffer_T &buffer, gpuStream_t stream) override |
void | prepareCoalescence (Block *coarseReceiver, gpuStream_t gpuStream=nullptr) |
Fine to Coarse. More... | |
void | unpackDataFineToCoarse (Block *coarseReceiver, const BlockID &fineSender, stencil::Direction dir, GpuBuffer_T &buffer, gpuStream_t stream) override |
void | communicateLocalFineToCoarse (const Block *fineSender, Block *coarseReceiver, stencil::Direction dir, gpuStream_t stream) override |
void | communicateLocalFineToCoarse (const Block *fineSender, Block *coarseReceiver, stencil::Direction dir, GpuBuffer_T &buffer, gpuStream_t stream) override |
uint_t | sizeEqualLevelSend (const Block *sender, stencil::Direction dir) override |
uint_t | sizeCoarseToFineSend (const Block *coarseSender, const BlockID &fineReceiver, stencil::Direction dir) override |
uint_t | sizeCoarseToFineReceive (Block *fineReceiver, stencil::Direction dir) override |
uint_t | sizeFineToCoarseSend (const Block *fineSender, stencil::Direction dir) override |
Public Member Functions inherited from walberla::gpu::GeneratedNonUniformGPUPackInfo | |
GeneratedNonUniformGPUPackInfo ()=default | |
virtual | ~GeneratedNonUniformGPUPackInfo ()=default |
void | packDataEqualLevel (const Block *sender, stencil::Direction dir, GpuBuffer_T &buffer, gpuStream_t stream=nullptr) const |
virtual void | unpackDataEqualLevel (Block *receiver, stencil::Direction dir, GpuBuffer_T &buffer, gpuStream_t stream)=0 |
void | packDataCoarseToFine (const Block *coarseSender, const BlockID &fineReceiver, stencil::Direction dir, GpuBuffer_T &buffer, gpuStream_t stream=nullptr) const |
void | packDataFineToCoarse (const Block *fineSender, const BlockID &coarseReceiver, stencil::Direction dir, GpuBuffer_T &buffer, gpuStream_t stream=nullptr) const |
void | clearBufferSizeCheckMap () |
Public Attributes | |
const BlockDataID | commDataID_ |
Protected Member Functions | |
void | packDataEqualLevelImpl (const Block *sender, stencil::Direction dir, GpuBuffer_T &buffer, gpuStream_t stream) const override |
void | packDataCoarseToFineImpl (const Block *coarseSender, const BlockID &fineReceiver, stencil::Direction dir, GpuBuffer_T &buffer, gpuStream_t stream) const override |
void | packDataFineToCoarseImpl (const Block *fineSender, const BlockID &coarseReceiver, stencil::Direction dir, GpuBuffer_T &buffer, gpuStream_t stream) const override |
Private Member Functions | |
Vector3< cell_idx_t > | getNeighborShift (const BlockID &fineBlock, stencil::Direction dir) const |
Helper Functions As in PdfFieldPackInfo.h. More... | |
bool | areNeighborsInDirection (const Block *block, const BlockID &neighborID, Vector3< cell_idx_t > dirVec) const |
Checks whether or not the block with ID neighborID is a neighbor of block in direction dir . More... | |
CellInterval | intervalHullInDirection (const CellInterval &ci, Vector3< cell_idx_t > tangentialDir, cell_idx_t width) const |
Returns the part of a cell interval's hull of given width in direction dirVec. More... | |
bool | skipsThroughCoarseBlock (const Block *block, Direction dir) const |
For edge or corner directions, checks if a coarser block is part of the respective edge or corner intersection. More... | |
void | getCoarseBlockCommIntervals (const BlockID &fineBlockID, Direction dir, const PdfField_T *field, std::vector< std::pair< Direction, CellInterval > > &intervals) const |
For coarse-to-fine and fine-to-coarse communication, returns a list of pairs (Direction, CellInterval) mapping sub-directions of the communication direction to cell intervals on the coarse block interior whose data must be communicated as if communicating in those sub-directions. More... | |
void | getFineBlockCommIntervals (const BlockID &fineBlockID, Direction dir, const PdfField_T *field, std::vector< std::pair< Direction, CellInterval > > &intervals) const |
For coarse-to-fine and fine-to-coarse communication, returns a list of pairs (Direction, CellInterval) mapping sub-directions of the communication direction to cell intervals on the fine block whose data must be communicated as if communicating in those sub-directions. More... | |
CellInterval | getCoarseBlockCoalescenceInterval (const Block *coarseBlock, const BlockID &fineBlockID, Direction dir, const PdfField_T *field) const |
Private Attributes | |
const BlockDataID | pdfFieldID_ |
internal::NonuniformGPUPackingKernelsWrapper< PdfField_T, LatticeStorageSpecification_T::inplace > | kernels_ |
Additional Inherited Members | |
Protected Attributes inherited from walberla::gpu::GeneratedNonUniformGPUPackInfo | |
std::map< const Block *, std::map< stencil::Direction, std::map< uint_t, size_t > > > | bufferSize_ |
using walberla::lbm_generated::NonuniformGeneratedGPUPdfPackInfo< PdfField_T >::CommData_T = NonuniformGPUCommData< LatticeStorageSpecification_T > |
using walberla::lbm_generated::NonuniformGeneratedGPUPdfPackInfo< PdfField_T >::CommunicationStencil = typename LatticeStorageSpecification_T::CommunicationStencil |
using walberla::lbm_generated::NonuniformGeneratedGPUPdfPackInfo< PdfField_T >::LatticeStorageSpecification_T = typename PdfField_T::LatticeStorageSpecification |
using walberla::lbm_generated::NonuniformGeneratedGPUPdfPackInfo< PdfField_T >::Stencil = typename LatticeStorageSpecification_T::Stencil |
|
inline |
|
private |
Checks whether or not the block with ID neighborID
is a neighbor of block
in direction dir
.
|
overridevirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
overridevirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
overridevirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
overridevirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
overridevirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
inlineoverridevirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
private |
|
inlineprivate |
For coarse-to-fine and fine-to-coarse communication, returns a list of pairs (Direction, CellInterval) mapping sub-directions of the communication direction to cell intervals on the coarse block interior whose data must be communicated as if communicating in those sub-directions.
fineBlockID | ID of the fine block |
dir | Direction from the coarse to the fine block |
field | Pointer to the PDF field on the coarse block |
intervals | Vector that will be filled with the computed intervals |
|
inlineprivate |
For coarse-to-fine and fine-to-coarse communication, returns a list of pairs (Direction, CellInterval) mapping sub-directions of the communication direction to cell intervals on the fine block whose data must be communicated as if communicating in those sub-directions.
fineBlockID | ID of the fine block |
dir | Direction from the fine to the coarse block |
field | Pointer to the PDF Field on the fine block |
intervals | Vector that will be filled with the computed intervals |
|
inlineprivate |
Helper Functions As in PdfFieldPackInfo.h.
|
inlineprivate |
Returns the part of a cell interval's hull of given width in direction dirVec.
ci | The original cell interval |
dirVec | Direction Vector |
width | Width of the hull |
|
overrideprotectedvirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
overrideprotectedvirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
overrideprotectedvirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
void walberla::lbm_generated::NonuniformGeneratedGPUPdfPackInfo< PdfField_T >::prepareCoalescence | ( | Block * | coarseReceiver, |
gpuStream_t | gpuStream = nullptr |
||
) |
Fine to Coarse.
|
overridevirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
overridevirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
overridevirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
overridevirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
inlineprivate |
For edge or corner directions, checks if a coarser block is part of the respective edge or corner intersection.
block | The local block |
dir | The direction to check |
true
if dir is an edge or corner direction skipping through a coarser block.
|
inlineoverridevirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
overridevirtual |
Coarse to Fine.
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
|
override |
Equal Level.
|
overridevirtual |
Implements walberla::gpu::GeneratedNonUniformGPUPackInfo.
const BlockDataID walberla::lbm_generated::NonuniformGeneratedGPUPdfPackInfo< PdfField_T >::commDataID_ |
|
private |
|
private |