The tiling_parametersstructure is defined as follows:
struct tiling_parameters
{
/// Buffer dimensions in buffer element type. buffer_dimension[0] is the fast-moving dimension and is contiguous in memory.
/// When this variable is left unspecified, the dimensions of the associated buffer object will be used.
std::vector<uint32_t> buffer_dimension;
/// Tiling dimensions in buffer element type.
std::vector<uint32_t> tiling_dimension;
/// Multi-dimensional offset w.r.t. buffer starting element. Assuming buffer dimension is specified.
std::vector<int32_t> offset;
/// Vector of traversing_parameters. tile_traversal[i] represents i-th loop of inter-tile traversal,
/// where i=0 represents most inner loop and i=N-1 represents most outer loop.
std::vector<traversing_parameters> tile_traversal;
/// Output port id of the connected pktsplit or the input port id of the connected pktmerge.
int packet_port_id = -1;
/// Number of repetitions of tiling traversal
uint32_t repetition = 1;
/// Phase of tiling parameter resource sharing and execution
uint32_t phase = 0;
/// Real data boundary dimension for padding
std::vector<uint32_t> boundary_dimension;
};
One can see in this prameters all the global parameters of the transfer, but the order of the memory access is specified by the traversing_parameters:
struct traversing_parameters
{
/// The dimension of the inter-tile traversing loop.
uint32_t dimension = 0;
/// stride represents the distance in terms of buffer element type between consecutive inter-tile traversal in the dimension
uint32_t stride = 0;
/// wrap represents the number of steps before wrapping the current traversing loop and incrementing to the next traversing loop.
/// The traversal stops when the last wrap completes.
uint32_t wrap = 0;
bool operator==(const traversing_parameters& rhs) const
{
return (dimension == rhs.dimension && stride == rhs.stride && wrap == rhs.wrap);
}
};
Actually a vector of traversing_parameters is describing the access order. This allows the user to specify any dimension-wise order, starting with dimension 3 if the data must be ordered that way.