summaryrefslogtreecommitdiff
path: root/external/clBLAS/src/library/blas/gens/tile.h
diff options
context:
space:
mode:
Diffstat (limited to 'external/clBLAS/src/library/blas/gens/tile.h')
-rw-r--r--external/clBLAS/src/library/blas/gens/tile.h424
1 files changed, 0 insertions, 424 deletions
diff --git a/external/clBLAS/src/library/blas/gens/tile.h b/external/clBLAS/src/library/blas/gens/tile.h
deleted file mode 100644
index 15399340..00000000
--- a/external/clBLAS/src/library/blas/gens/tile.h
+++ /dev/null
@@ -1,424 +0,0 @@
-/* ************************************************************************
- * Copyright 2013 Advanced Micro Devices, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ************************************************************************/
-
-
-/*
- * API to manupulate with matrix tiles
- */
-
-#ifndef TILE_H_
-#define TILE_H_
-
-#include <kerngen.h>
-#include <blas_funcs.h>
-
-#define tileLineElemNum forEachTile
-
-struct BlasGenSettings;
-
-enum {
- MAX_TILE_BASE_NAMELEN = sizeof(Kstring) - 25,
- /*
- * It may be 16 vector components at maximum. Adding the length of the
- * subscript and selector operator, 2 digit index, and the end-line symbol,
- * to the maximum base name length we get the maximum tile element string
- * length
- */
- MAX_TILE_ELEMENT_STRLEN = sizeof(Kstring) - 1,
- MAX_TILE_VECLEN = 8
-};
-
-/**
- * @internal
- * @brief Flags showing tile storing specifics
- * @ignroup TILES
- */
-typedef enum TileCreationFlags {
- /** Tile C should be forced to non-transposed form */
- TILE_C_FORCE_NOTRANS = 0x01,
- /** tile vector length is equal to the length of fetched vectors */
- TILE_WITH_FETCH_VECLEN = 0x02,
- /**
- * If depending of transposing vector length is greater than
- * number of rows or columns, store several rows or columns respectively
- * in each vector
- */
- TILE_PACKED = 0x04
-} TileCreationFlags;
-
-/**
- * @internal
- * @brief Type of storage in the private memory
- * @ingroup TILES
- */
-typedef enum PrivateStorageType {
- /** Tile is stored in array */
- PRIV_STORAGE_ARRAY,
- /** Tile is stored in a set of variables */
- PRIV_STORAGE_VARIABLE_SET
-} PrivateStorageType;
-
-typedef enum TileCopyOps {
- TILECOPY_ASSIGN,
- TILECOPY_ADD_ASSIGN,
- TILECOPY_SUB_ASSIGN,
- TILECOPY_MUL_ASSIGN,
- TILECOPY_DIV_ASSIGN,
- TILECOPY_MOD_ASSIGN
-} TileCopyOps;
-
-/**
- * @internal
- * @brief Tile element half types
- * @ingroup TILES
- */
-typedef enum TileElementHalf {
- TE_HALF_LOW,
- TE_HALF_HIGH
-} TileElementHalf;
-
-/**
- * @internal
- * @brief Matrix tile stored in a private area
- * @ingroup TILES
- */
-typedef struct Tile {
- const char *baseName;
- unsigned int nrRows;
- unsigned int nrCols;
- unsigned int vecLen;
- DataType dtype;
- PrivateStorageType storType;
- /** Flag of storing tile in the transposed form */
- bool trans;
- /*
- * Depending on the transposing several rows or columns can be fit
- * into single vector. It makes sense only when number of rows or column
- * respectively is less than vector length
- */
- bool packed;
-} Tile;
-
-/**
- * @internal
- * @brief Initialize tile
- *
- * @param[out] tile Tile description structure to fill
- * @param[in] baseName Tile base name
- * @param[in] nrRows Number of rows in the tile
- * @param[in] nrCols Number of columns in the tile
- * @param[in] vecLen Length of one native OpenCL element being a part of
- * the tile
- * @param[in] dtype Data type
- * @param[in] storType Tile storate type
- * @param[in] trans Shows if tile is stored in the transposed form
- * or direct
- * @param[in] packed Tile is stored in packed form. Has not effect if
- * a single line can be fit into the single vector.
- *
- * If \b vecLen param is above MAX_TILE_VECLEN then will be truncated into
- * MAX_TILE_VECLEN.
- *
- * @ingroup TILES
- */
-void
-initTile(
- Tile *tile,
- const char *baseName,
- unsigned int nrRows,
- unsigned int nrCols,
- unsigned int vecLen,
- DataType dtype,
- PrivateStorageType storType,
- bool trans,
- bool packed);
-
-/**
- * @internal
- * @brief Initialize matrix tile from generator settings
- *
- * @param[out] gset Generator settings which tile should be initialized in
- * @param[in] funcID BLAS function ID
- * @param[in] flags Tile creation flags
- * @param[in] storType Storage type
- *
- * If \b baseName field of a tile structure in the generator settings is zero,
- * it is initialized with the default value: "a" for the matrix A, "b" for
- * the matrix B, "x" for the vector X, "c" for the matrix C, and "y" for the
- * vector Y.
- *
- * As X and Y are column-vectors from the math point of view, tiles for them
- * are always packed irrespectively the TileCreationFlags::TILE_PACKED flag
- * is specified or not.
- *
- *
- * Transposition of C tile matches transposition of C matrix by default, until
- * the TILE_C_FORCE_NOTRANS flag is not set. If the flag is set, tile is
- * forced to be initialized as non-transposed and veclen must be verified.
- *
- */
-void
-initDefaultTiles(
- struct BlasGenSettings *gset,
- BlasFunctionID funcID,
- TileCreationFlags flags,
- PrivateStorageType storType);
-
-/**
- * @internal
- * @brief Get entire number of vectors in the tile
- *
- * @param[in] tile Tile to get number of vectors of
- */
-unsigned int
-tileVectorsNum(const Tile *tile);
-
-/**
- * @internal
- * @brief Size of entire tile storage in elements
- *
- * @param[in] tile Tile to get size of
- */
-unsigned int
-tileStorageSize(const Tile *tile);
-
-/**
- * @brief Get length of tile line segment
- *
- * @param[in] Tile Source tile
- *
- * Under that segment it is assumed such a part of line which doesn't cross over
- * vector bound and row/column bound depending on the tile is transposed or not.
- * In the other words, this is a piece of data which provides maximum possible
- * vectorization don't breaking correctness.
- */
-unsigned int
-tileLineSegmentLen(const Tile *tile);
-
-/**
- * @internal
- * @brief Declare variables needed to store a tile
- *
- * @param[out] ctx Generator context
- * @param[in] gset Generator settings containing desctiptors of
- * tiles to declare storages for
- *
- * If a tile is fit into a single variable of the native type matching
- * to the tile's vector length, it is declared a single variable with the name
- * matching the \b baseName field being a part of the @ref Tile structure.
- * If not, the following rules are applied. If the tile is needed to be stored
- * in a private array, variable name matches the base name and array size
- * is sufficient to fit such a tile. If the tile is needed to be stored
- * in a set of variables which names are arranged as the base name followed
- * with an integer index starting from zero and incremented by one for each
- * subsequent variable.
- *
- * @return 0 on success, and -EOVERFLOW if the source buffer is overflowed
- *
- * @ingroup TILES
- */
-int
-declareTileStorages(struct KgenContext *ctx, const struct BlasGenSettings *gset);
-
-/**
- * @internal
- * @brief Declare variable needed to store one tile
- *
- * @param[out] ctx Generator context
- * @param[in] tile Tile settings containing desctiptors of
- * a tile to declare storages for
- *
- * If a tile is fit into a single variable of the native type matching
- * to the tile's vector length, it is declared a single variable with the name
- * matching the \b baseName field being a part of the @ref Tile structure.
- * If not, the following rules are applied. If the tile is needed to be stored
- * in a private array, variable name matches the base name and array size
- * is sufficient to fit such a tile. If the tile is needed to be stored
- * in a set of variables which names are arranged as the base name followed
- * with an integer index starting from zero and incremented by one for each
- * subsequent variable.
- *
- * @return 0 on success, and -EOVERFLOW if the source buffer is overflowed
- *
- * @ingroup TILES
- */
-int
-declareOneTileStorage(struct KgenContext *ctx, const Tile *tile);
-
-/**
- * @internal
- * @brief Sprintf element composed of one or several data elements
- * stored in the tile
- *
- * @param[out] str Kernel string object to store tile element
- * expression
- * @param[in] tile Tile description structure
- * @param[in] row Row of the starting element
- * @param[in] col Element column
- * @param[in] len Number of tile elements needed to be captured by
- * the expression
- *
- * \b row should be less than number of rows and \b col should be less than
- * number of columns in the tile. Traversal of a tile line is not allowed.
- * That means \b col plus \b len should be not greater than number of columns
- * if the tile is stored in direct form, and \b row plus \b len should be not
- * greater than number of rows if the tile is stored in transposed form.
- * If it is not hold true in debug mode, an assertion is triggered.
- * In the release may produce a wrong code which can be even not compilable.
- *
- * @ingroup TILES
- */
-void
-sprintfTileElement(
- Kstring *str,
- const Tile *tile,
- unsigned int row,
- unsigned int col,
- unsigned int len);
-
-/**
- * @internal
- * @brief Sprintf half of a single complex data element stored in the tile
- *
- * @param[out] str Kernel string object to store tile element
- * expression
- * @param[in] tile Tile description structure
- * @param[in] row Row of the starting element
- * @param[in] col Element column
- * @param[in] half Half type
- *
- * The restrictions for \b row and \b col are the same as for
- * sprintfTileElement(). This function is applicable only for tiles containing
- * complex data and must not be used in case of real data.
- *
- * @ingroup TILES
- */
-void
-sprintfTileElementHalf(
- Kstring *str,
- const Tile *tile,
- unsigned int row,
- unsigned int col,
- TileElementHalf half);
-
-/**
- * @internal
- * @brief Sprintf element composed of one or several data elements
- * stored in each of the tiles
- *
- * @param[out] kstrs Kernel string objects array to store element
- * expression for each tile
- * @param[in] row Vectorizable element row
- * @param[in] col Vectorizable element column
- * @param[in] num Number of tile description structure
- * @param[in] first First tile description structure
- *
- * Decides how many vectored access in for each line of each tile will be and
- * does sprintfTileElement() for each of tiles. This function can have got any
- * value of \b row \b and \b col \b. \b kstrs \b and \b tile->baseName \b can
- * have NULL, then no sprintfTileElement() will be executed.
- *
- * @return 0 if no sprintf tiles, or number of vectors in one line
- *
- * @ingroup TILES
- */
-int
-forEachTile(Kstring *kstrs,
- unsigned int row,
- unsigned int col,
- unsigned int num,
- Tile *first,
- ...);
-
-/**
- * @internal
- * @brief Generate assigning a tile element with zero
- *
- * @param[out] ctx Generator context
- * @param[in] tile Tile description structure
- * @param[in] row Row of the starting element
- * @param[in] col Element column
- * @param[in] len Number of elements needed to be assigned with zero
- *
- * See decription of sprintfTileElement() for more details about restrictions
- * on \b row, \b col and \b len.
- *
- * @ingroup TILES
- */
-void
-genSetZeroInTile(
- struct KgenContext *ctx,
- const Tile *tile,
- unsigned int row,
- unsigned int col,
- unsigned int len);
-
-/**
- * @internal
- * @brief Generate assigning a tile element with unit
- *
- * @internal
- * @brief Generate assigning a tile element with zero
- *
- * @param[out] ctx Generator context
- * @param[in] tile Tile description structure
- * @param[in] row Row of the starting element
- * @param[in] col Element column
- *
- * \b row should be less than number of rows and \b col should be less than
- * number of columns in the tile. If it is not hold true in debug mode,
- * an assertion is triggered. In the release may produce a wrong code which
- * can be even not compilable.
- *
- * @ingroup TILES
- */
-void
-genSetUnitInTile(
- struct KgenContext *ctx,
- const Tile *tile,
- unsigned int row,
- unsigned int col);
-
-/**
- * @internal
- * @brief Generate zeroing an entire tile
- *
- * @param[out] ctx Generator context
- * @param[in] tile Tile description structure
- *
- * @ingroup TILES
- */
-void
-genZeroTile(struct KgenContext *ctx, const Tile *tile);
-
-/**
- * @internal
- * @brief Generate copying between 2 tiles
- *
- * @param[out] ctx Generator context
- * @param[in] dst Destination tile
- * @param[in] src Source tile
- *
- * @ingroup TILES
- */
-void
-genTileCopy(
- struct KgenContext *ctx,
- const Tile *dst,
- const Tile *src,
- TileCopyOps op);
-
-#endif /* TILE_H_ */