summaryrefslogtreecommitdiff
path: root/external/clBLAS/src/library/blas/gens/trxm_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'external/clBLAS/src/library/blas/gens/trxm_common.c')
-rw-r--r--external/clBLAS/src/library/blas/gens/trxm_common.c289
1 files changed, 0 insertions, 289 deletions
diff --git a/external/clBLAS/src/library/blas/gens/trxm_common.c b/external/clBLAS/src/library/blas/gens/trxm_common.c
deleted file mode 100644
index 0e4c68d1..00000000
--- a/external/clBLAS/src/library/blas/gens/trxm_common.c
+++ /dev/null
@@ -1,289 +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.
- * ************************************************************************/
-
-
-#include <stdio.h>
-
-#include <matrix_props.h>
-#include <matrix_dims.h>
-
-#include "trxm_common.h"
-
-void
-declareTrxmKernel(
- struct KgenContext *ctx,
- DataType dtype,
- const PGranularity *pgran,
- KernelExtraFlags kflags,
- BlasFunctionID funcID,
- const char *nameSuffix,
- bool declareC,
- bool restrictPointers)
-{
- char tmp[1024];
- char strC[1024];
- char fpref, fsuff;
- const char *typeName;
- // swap coordinate names for the right side
- char coordNames[2] = {'M', 'N'};
- int side = ((kflags & KEXTRA_SIDE_RIGHT) != 0);
- char offStr[1024];
- int len = 0;
- const char *qualA[2], *qualB[2]; // type qualifiers
-
- typeName = dtypeBuiltinType(dtype);
- fpref = dtypeToBlasPrefix(dtype);
- fsuff = (funcID == CLBLAS_TRMM) ? 'm' : 's';
- if (nameSuffix == NULL) {
- nameSuffix = "";
- }
- strC[0] = '\0';
- if (declareC) {
- sprintf(strC, " __global %s *C,\n", typeName);
- }
-
- offStr[0] = '\0';
- if (kflags & KEXTRA_STARTM_NOT_ZERO) {
- len = sprintf(offStr, ",\n uint offset%c", coordNames[side]);
- }
- if (kflags & KEXTRA_STARTN_NOT_ZERO) {
- len += sprintf(offStr + len, ",\n uint offset%c",
- coordNames[1 - side]);
- }
- if (kflags & KEXTRA_A_OFF_NOT_ZERO) {
- strcat(offStr, ",\n uint offA");
- }
- if (kflags & KEXTRA_BX_OFF_NOT_ZERO) {
- strcat(offStr, ",\n uint offB");
- }
-
- if (restrictPointers) {
- qualA[0] = "const ";
- qualA[1] = "restrict ";
- }
- else {
- qualA[0] = qualA[1] = "";
- }
-
- if (restrictPointers && declareC) {
- qualB[0] = "const ";
- qualB[1] = "restrict ";
- }
- else {
- qualB[0] = qualB[1] = "";
- }
-
- sprintf(tmp, "__attribute__((reqd_work_group_size(%u, 1, 1)))\n"
- "void __kernel\n"
- "%ctr%cm%s(\n"
- " uint %c,\n"
- " uint %c,\n"
- " %s alpha,\n"
- " %s__global %s *%sA,\n"
- " uint lda,\n"
- " %s__global %s *%sB,\n"
- "%s"
- " uint ldb%s)\n",
- pgran->wgSize[0], fpref, fsuff, nameSuffix, coordNames[side],
- coordNames[1 - side], typeName, qualA[0], typeName, qualA[1],
- qualB[0], typeName, qualB[1], strC, offStr);
-
- kgenDeclareFunction(ctx, tmp);
-}
-
-
-void
-genTrxmBMatrShift(
- struct KgenContext *ctx,
- KernelExtraFlags kflags,
- bool useC)
-{
- char tmp[1024], addstr[1024];
- int len = 0;
- const char *opstr;
- char coordNames[2] = {'M', 'N'};
- int side = (int)((kflags & KEXTRA_SIDE_RIGHT) != 0);
- bool cmaj = ((kflags & KEXTRA_COLUMN_MAJOR) != 0);
-
- if (kflags & KEXTRA_BX_OFF_NOT_ZERO) {
- len = sprintf(addstr, "offB");
- }
- if (kflags & KEXTRA_STARTM_NOT_ZERO) {
- opstr = (len) ? " + " : "";
-
- if (cmaj) {
- len += sprintf(addstr + len, "%soffset%c",
- opstr, coordNames[side]);
- }
- else {
- len += sprintf(addstr + len, "%soffset%c * ldb",
- opstr, coordNames[side]);
- }
- }
- if (kflags & KEXTRA_STARTN_NOT_ZERO) {
- opstr = (len) ? " + " : "";
-
- if (cmaj) {
- len += sprintf(addstr + len, "%soffset%c * ldb",
- opstr, coordNames[1 - side]);
- }
- else {
- len += sprintf(addstr + len, "%soffset%c",
- opstr, coordNames[1 - side]);
- }
- }
-
- if (len) {
- sprintf(tmp, "B += %s;\n", addstr);
- kgenAddStmt(ctx, tmp);
- if (useC) {
- sprintf(tmp, "C += %s;\n", addstr);
- kgenAddStmt(ctx, tmp);
- }
- kgenAddBlankLine(ctx);
- }
-}
-
-void
-fixupTrxmKargs(CLBlasKargs *kargs)
-{
- size_t offA = (kargs->side == clblasRight) ? kargs->offsetN :
- kargs->offsetM;
- kargs->offA += offA * kargs->lda.matrix + offA;
- if (kargs->order == clblasColumnMajor) {
- kargs->offBX += kargs->offsetN * kargs->ldb.matrix + kargs->offsetM;
- }
- else {
- kargs->offBX += kargs->offsetM * kargs->ldb.matrix + kargs->offsetN;
- }
-
- kargs->offsetM = kargs->offsetN = 0;
-}
-
-/* avoid " + 0" statements */
-static void
-genAdd(char *buf, size_t val)
-{
- if (val == 0) {
- buf[0] = 0; //zero length string
- }
- else {
- sprintf(buf, " + %lu", val);
- }
-}
-
-int
-genTrxmPostFetchZero(
- struct KgenContext *ctx,
- MatrixRole mrole,
- void *priv)
-{
- TilePostFetchPrivate *pfPriv = (TilePostFetchPrivate*)priv;
- char tmp[1024];
- char stmtStr[512];
-
- const CLBLASKernExtra *kextra = pfPriv->gset->kextra;
- KernelExtraFlags kflags = kextra->flags;
- const KernelVarNames *vnames = &pfPriv->gset->varNames;
- char yCoordVar[64], xCoordVar[64];
- size_t blockx, blocky;
- unsigned int x, y;
- const struct SubproblemDim *dims = &pfPriv->gset->subdims[1];
- DataType dtype = pfPriv->gset->kextra->dtype;
- bool b;
- bool tra;
- Kstring kstr;
- const Tile* pTile = &pfPriv->gset->tileA;
-
- // For both A and B tiles, zero tail along K
- b = ((pfPriv->gset->flags & BGF_DISTINCT_VECLEN));
- if (checkForTailFetches(pfPriv->funcID, dims, kextra,
- mrole, b, true) != FETCH_NO_TAILS) {
- defaultTilePostFetch(ctx, mrole, &pfPriv[1]);
- }
-
- if (mrole == MATRIX_B) {
- /* This is not triangular matrix, just go away from here */
- return 0;
- }
-
- blockx = blocky = 0;
- // zero triangular part of tile a
- // either single row of tile a either the whole tile have been fetched
-
- tra = isMatrixAccessColMaj(pfPriv->funcID, kflags, mrole);
- if (tra) {
- blocky = pfPriv->wholeA ? dims->bwidth : 1;
- blockx = dims->y;
- sprintf(xCoordVar, "%s", vnames->coordA);
- sprintf(yCoordVar, "%s", vnames->k);
- }
- else {
- blocky = pfPriv->wholeA ? dims->y : 1;
- blockx = dims->bwidth;
- sprintf(xCoordVar, "%s", vnames->k);
- sprintf(yCoordVar, "%s", vnames->coordA);
- }
-
- kgenAddStmt(ctx, "// post fetch A\n");
- kgenBeginBranch(ctx, NULL);
-
- genAdd(stmtStr, (size_t)pfPriv->fetchNumA);
- sprintf(tmp, "uint zy = %s%s;\n", yCoordVar, stmtStr);
- kgenAddStmt(ctx, tmp);
-
- // loop through block rows (there is only one row in A block)
- for(y = 0; y < blocky; y++) {
- // loop through all elements of block row
- for(x = 0; x < blockx; x++) {
- unsigned int row, col;
- char cmp = '<';
-
- row = (unsigned int)(tra ? x : y);
- col = (unsigned int)(tra ? y : x);
-
- if (((kflags & KEXTRA_UPPER_TRIANG) != 0) ^
- ((kflags & KEXTRA_COLUMN_MAJOR) != 0)) {
- cmp = '>';
- }
-
- genAdd(stmtStr, x);
- sprintfTileElement(&kstr, pTile, row, col, 1);
-
- sprintf(tmp, "%s = zy %c %s%s ? 0 : %s;\n",
- kstr.buf,
- cmp, xCoordVar, stmtStr,
- kstr.buf);
-
- kgenAddStmt(ctx, tmp);
- if (kflags & KEXTRA_UNIT_DIAGONAL) {
- const char *one = strOne(dtype);
-
- sprintf(tmp, "%s = zy == %s%s ? "
- "%s : %s;\n",
- kstr.buf, xCoordVar, stmtStr,
- one, kstr.buf);
- kgenAddStmt(ctx, tmp);
- }
- }
- if (y != blocky - 1) {
- kgenAddStmt(ctx, "zy++;\n");
- }
- pfPriv->fetchNumA++;
- }
-
- return kgenEndBranch(ctx, NULL);
-}