StencilStream v3.0.0
SYCL-based Stencil Simulation Framework Targeting FPGAs
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Attributes | List of all members
stencil::monotile::Grid< Cell, word_size > Class Template Reference

A grid class for the monotile architecture. More...

#include <Grid.hpp>

Classes

class  GridAccessor
 An accessor for the monotile grid. More...
 

Public Member Functions

 Grid (uindex_t grid_width, uindex_t grid_height)
 Create a new, uninitialized grid with the given dimensions.
 
 Grid (sycl::range< 2 > range)
 Create a new, uninitialized grid with the given dimensions.
 
 Grid (sycl::buffer< Cell, 2 > buffer)
 Create a new grid with the same size and contents as the given SYCL buffer.
 
 Grid (Grid const &other_grid)
 Create a new reference to the given grid.
 
Grid make_similar () const
 Create an new, uninitialized grid with the same size as the current one.
 
uindex_t get_grid_width () const
 Return the width, or number of columns, of the grid.
 
uindex_t get_grid_height () const
 Return the height, or number of rows, of the grid.
 
void copy_from_buffer (sycl::buffer< Cell, 2 > input_buffer)
 Copy the contents of the SYCL buffer into the grid.
 
void copy_to_buffer (sycl::buffer< Cell, 2 > output_buffer)
 Copy the contents of the grid into the SYCL buffer.
 
template<typename in_pipe >
sycl::event submit_read (sycl::queue queue)
 Submit a kernel that sends the contents of the grid into a pipe.
 
template<typename out_pipe >
sycl::event submit_write (sycl::queue queue)
 Submit a kernel that receives cells from the pipe and writes them to the grid.
 

Static Public Attributes

static constexpr uindex_t dimensions = 2
 The number of dimensions of the grid.
 

Detailed Description

template<class Cell, uindex_t word_size = 64>
class stencil::monotile::Grid< Cell, word_size >

A grid class for the monotile architecture.

This grid, which fullfils the Grid concept, contains a two-dimensional buffer of cells to be used together with the StencilUpdate class.

The contents of the grid can be accessed by a host-side program using the GridAccessor class template. For example, one can write the contents of a grid object as follows:

for (uindex_t c = 0; c < grid.get_grid_width(); c++) {
for (uindex_t r = 0; r < grid.get_grid_height(); r++) {
accessor[c][r] = foo(c, r);
}
}
An accessor for the monotile grid.
Definition Grid.hpp:144
BOOST_PP_CAT(BOOST_PP_CAT(uint, STENCIL_INDEX_WIDTH), _t) uindex_t
An unsigned integer of configurable width.
Definition Index.hpp:42

Alternatively, one may write their data into a SYCL buffer and copy it into the grid using the method copy_from_buffer. The method copy_to_buffer does the reverse: It writes the contents of the grid into a SYCL buffer.

On the device side, the data can be read or written with the help of the method templates submit_read and submit_write. Those take a SYCL pipe as a template argument and enqueue kernels that read/write the contents of the grid to/from the pipes.

Template Parameters
CellThe cell type to store.
word_sizeThe word size of the memory system, in bytes. This is used to optimize the kernels submitted by submit_read and submit_write.

Constructor & Destructor Documentation

◆ Grid() [1/4]

template<class Cell , uindex_t word_size = 64>
stencil::monotile::Grid< Cell, word_size >::Grid ( uindex_t  grid_width,
uindex_t  grid_height 
)
inline

Create a new, uninitialized grid with the given dimensions.

Parameters
grid_widthThe width, or number of columns, of the new grid.
grid_heightThe height, or number of rows, of the new grid.

◆ Grid() [2/4]

template<class Cell , uindex_t word_size = 64>
stencil::monotile::Grid< Cell, word_size >::Grid ( sycl::range< 2 >  range)
inline

Create a new, uninitialized grid with the given dimensions.

Parameters
rangeThe range of the new grid. The first index will be the width and the second index will be the height of the grid.

◆ Grid() [3/4]

template<class Cell , uindex_t word_size = 64>
stencil::monotile::Grid< Cell, word_size >::Grid ( sycl::buffer< Cell, 2 >  buffer)
inline

Create a new grid with the same size and contents as the given SYCL buffer.

The contents of the buffer will be copied to the grid by the host. The SYCL buffer can later be used elsewhere.

Parameters
bufferThe buffer with the contents of the new grid.

◆ Grid() [4/4]

template<class Cell , uindex_t word_size = 64>
stencil::monotile::Grid< Cell, word_size >::Grid ( Grid< Cell, word_size > const &  other_grid)
inline

Create a new reference to the given grid.

The newly created grid object will point to the same underlying data as the referenced grid. Changes made via the newly created grid object will also be visible to the old grid object, and vice-versa.

Parameters
other_gridThe other grid the new grid should reference.

Member Function Documentation

◆ copy_from_buffer()

template<class Cell , uindex_t word_size = 64>
void stencil::monotile::Grid< Cell, word_size >::copy_from_buffer ( sycl::buffer< Cell, 2 >  input_buffer)
inline

Copy the contents of the SYCL buffer into the grid.

The SYCL buffer will be accessed read-only one the host; It may be used elsewhere too. The buffer however has to have the same size as the grid, otherwise a std::range_error is thrown.

Parameters
input_bufferThe buffer to copy the data from.
Exceptions
std::range_errorThe size of the buffer does not match the grid.

◆ copy_to_buffer()

template<class Cell , uindex_t word_size = 64>
void stencil::monotile::Grid< Cell, word_size >::copy_to_buffer ( sycl::buffer< Cell, 2 >  output_buffer)
inline

Copy the contents of the grid into the SYCL buffer.

The contents of the SYCL buffer will be overwritten on the host. The buffer also has to have the same size as the grid, otherwise a std::range_error is thrown.

Parameters
output_bufferThe buffer to copy the data to.
Exceptions
std::range_errorThe size of the buffer does not match the grid.

◆ get_grid_height()

template<class Cell , uindex_t word_size = 64>
uindex_t stencil::monotile::Grid< Cell, word_size >::get_grid_height ( ) const
inline

Return the height, or number of rows, of the grid.

◆ get_grid_width()

template<class Cell , uindex_t word_size = 64>
uindex_t stencil::monotile::Grid< Cell, word_size >::get_grid_width ( ) const
inline

Return the width, or number of columns, of the grid.

◆ make_similar()

template<class Cell , uindex_t word_size = 64>
Grid stencil::monotile::Grid< Cell, word_size >::make_similar ( ) const
inline

Create an new, uninitialized grid with the same size as the current one.

◆ submit_read()

template<class Cell , uindex_t word_size = 64>
template<typename in_pipe >
sycl::event stencil::monotile::Grid< Cell, word_size >::submit_read ( sycl::queue  queue)
inline

Submit a kernel that sends the contents of the grid into a pipe.

The entirety of the grid will be send into the pipe in column-major order, meaning that the last index (which denotes the row) will change the quickest. The method returns the event of the launched kernel immediately.

This method is explicitly part of the user-facing API: You are allowed and encouraged to use this method to feed custom kernels.

Template Parameters
in_pipeThe pipe the data is sent into.
Parameters
queueThe queue to submit the kernel to.
Returns
The event object of the submitted kernel.

◆ submit_write()

template<class Cell , uindex_t word_size = 64>
template<typename out_pipe >
sycl::event stencil::monotile::Grid< Cell, word_size >::submit_write ( sycl::queue  queue)
inline

Submit a kernel that receives cells from the pipe and writes them to the grid.

The kernel expects that the entirety of the grid can be overwritten with the cells read from the pipe. Also, it expects that the cells are sent in column-major order, meaning that the last index (which denotes the row) will change the quickest. The method returns the event of the launched kernel immediately.

This method is explicitly part of the user-facing API: You are allowed and encouraged to use this method to feed custom kernels.

Template Parameters
out_pipeThe pipe the data is received from.
Parameters
queueThe queue to submit the kernel to.
Returns
The event object of the submitted kernel.

Member Data Documentation

◆ dimensions

template<class Cell , uindex_t word_size = 64>
constexpr uindex_t stencil::monotile::Grid< Cell, word_size >::dimensions = 2
staticconstexpr

The number of dimensions of the grid.

May be changed in the future when other dimensions are supported.


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