SMAUG
Simulating Machine Learning Applications on gem5-Aladdin
|
Tiling optimizer for pooling operators on SMV. More...
#include <smv_pooling_tiling.h>
Tiling optimizer for pooling operators on SMV.
Definition at line 19 of file smv_pooling_tiling.h.
Static Public Member Functions | |
static std::array< TiledTensor, 2 > | doTiling (SmvPoolingOp *op) |
static TilingConfig | computeBasicTileShapes (SmvPoolingOp *op) |
Determine the best basic tiling shape for this pooling layer. More... | |
Static Protected Member Functions | |
static std::array< TilingDims, 2 > | determineBestTilingDims (Tensor *inputs, Tensor *outputs, int maxTileSize, std::pair< int, int > poolSize) |
Determine the best tiling dimensions for running pooling on SMV. More... | |
Static Protected Member Functions inherited from smaug::smv::TilingOptimizerBase | |
static TilingDims | findBestTilingDims (const TensorShape &shape, int maxTileSize, const std::vector< int > &minShape) |
Find the best set of dimensions to tile a given tensor shape. More... | |
static void | enum2DTensorTilingConfigs (TensorShape shape, int maxTileSize, const std::vector< int > &minShape, const std::vector< int > &strides, std::vector< TensorShape > &configs) |
Enumerates all tiling configs for a two dimensional Tensor. More... | |
static void | enum4DTensorTilingConfigs (TensorShape shape, int maxTileSize, const std::vector< int > &minShape, const std::vector< int > &strides, std::vector< TensorShape > &configs) |
Enumerates all tiling configs for a four dimensional Tensor. More... | |
|
static |
Determine the best basic tiling shape for this pooling layer.
The algorithm first determines the dimensions along which the inputs and outputs will be tiled. Then based on those dimensions, we enumerate all possible basic tile shapes for inputs and outputs. A basic shape is the shape that all but potentially the last tile along a set of dimensions will use. This duo of tile shapes defines a TilingConfig. The TilingConfig that maximizes the total combined size of input and output tiles is chosen as the best.
To limit the number of possibilities, we only enumerate each dimension in certain increments. For example, input channels are only enumerated in multiples of kVectorSize.
This algorithm assumes that the maximum tile size for inputs and outputs are all the same and that they will reside in separate scratchpads (no sharing).
op | The SMV pooling operator. All tensors must have been created with createAllTensors() prior to calling this function. |
Definition at line 52 of file smv_pooling_tiling.cpp.
|
staticprotected |
Determine the best tiling dimensions for running pooling on SMV.
This function imposes some additional constraints on the tiling dimensions, in that certain combinations of input/output tiling dimensions are not allowed in the interest of tiling code complexity.
Definition at line 13 of file smv_pooling_tiling.cpp.