Пример #1
0
/*
__kernel void %PREFIXrotm_kernel( __global %TYPE *_X, __global %TYPE *_Y, uint N,
                                uint offx, int incx, uint offy, int incy
#ifndef DO_ROT
                                , __global %TYPE *_param, uint offParam             // Rotm parameters
#else
                                , %PTYPE C,  %PTYPE S                               // Rot parameters
#endif
*/
static void
assignKargs(KernelArg *args, const void *params, const void* )
{
    CLBlasKargs *blasArgs = (CLBlasKargs*)params;
	cl_int incx, incy;

    INIT_KARG(&args[0], blasArgs->A);
	INIT_KARG(&args[1], blasArgs->B);
    initSizeKarg(&args[2], blasArgs->N);
    initSizeKarg(&args[3], blasArgs->offBX);
    incx = blasArgs->ldb.Vector;
    INIT_KARG(&args[4], incx);
    initSizeKarg(&args[5], blasArgs->offCY);
    incy = blasArgs->ldc.Vector;
    INIT_KARG(&args[6], incy);

    if(blasArgs->pigFuncID == CLBLAS_ROT)
    {
        DataType alphaBetaType = (blasArgs->dtype == TYPE_COMPLEX_FLOAT)? TYPE_FLOAT:
                                ((blasArgs->dtype == TYPE_COMPLEX_DOUBLE)? TYPE_DOUBLE:  blasArgs->dtype);
        assignScalarKarg(&args[7], &(blasArgs->alpha), alphaBetaType);
	    assignScalarKarg(&args[8], &(blasArgs->beta), alphaBetaType);
	}
	else if(blasArgs->pigFuncID == CLBLAS_ROTM)
	{
        INIT_KARG(&args[7], blasArgs->D);
        initSizeKarg(&args[8], blasArgs->offd);
    }

	return;
}
Пример #2
0
static void
assignKargs(KernelArg *args, const void *params, const void*)
{
    CLBlasKargs *blasArgs = (CLBlasKargs*)params;

#ifdef DEBUG_SYMM
    printf("SAlpha=%f, DAlpha=%f, CAlpha =<%f, %f>, DAlpha=<%f, %f>\n",
           blasArgs->alpha.argFloat, blasArgs->alpha.argDouble, CREAL(blasArgs->alpha.argFloatComplex), CIMAG(blasArgs->alpha.argFloatComplex),
           CREAL(blasArgs->alpha.argDoubleComplex) , CIMAG(blasArgs->alpha.argDoubleComplex));
    printf("SBeta=%f, DBeta=%f, CBeta=<%f, %f>, DBeta=<%f, %f>\n",
           blasArgs->beta.argFloat, blasArgs->beta.argDouble, CREAL(blasArgs->beta.argFloatComplex), CIMAG(blasArgs->beta.argFloatComplex),
           CREAL(blasArgs->beta.argDoubleComplex) , CIMAG(blasArgs->beta.argDoubleComplex));
#endif

    INIT_KARG(&args[0], blasArgs->A);   //A - input matrix - argument
    INIT_KARG(&args[1], blasArgs->B);
    INIT_KARG(&args[2], blasArgs->C);
    initSizeKarg(&args[3], blasArgs->M);
    initSizeKarg(&args[4], blasArgs->N);
    initSizeKarg(&args[5], blasArgs->lda.matrix);
    initSizeKarg(&args[6], blasArgs->ldb.matrix);
    initSizeKarg(&args[7], blasArgs->ldc.matrix);
    initSizeKarg(&args[8], blasArgs->offa); //PENDING: offA or offa ??
    initSizeKarg(&args[9], blasArgs->offBX);
    initSizeKarg(&args[10], blasArgs->offCY);
    assignScalarKarg(&args[11], &(blasArgs->alpha), blasArgs->dtype);
    assignScalarKarg(&args[12], &(blasArgs->beta), blasArgs->dtype);
    return;
}
Пример #3
0
/*
__kernel void %PREFIXgbmv_RNT_kernel( __global const %TYPE * _A, __global %TYPE * _y_vector, __global %TYPE const* restrict _x_vector,
                                        uint M, uint N, uint KL, uint KU, uint lda, int incx, int incy, uint offa, uint offx, uint offy
ifndef TBMV_ONLY
                                    ,%TYPE alpha, %TYPE beta
endif
*/
static void
assignKargs(KernelArg *args, const void *params, const void* )
{
    CLBlasKargs *blasArgs = (CLBlasKargs*)params;

	size_t fM, fN, fKL, fKU;
	cl_int inc;

	if( blasArgs->order == clblasColumnMajor )       // M, N, KL, KU gets swapped
	{
	    fM = blasArgs->N;
	    fN = blasArgs->M;
	    fKL = blasArgs->KU;
	    fKU = blasArgs->KL;
	}
	else    {
	    fM = blasArgs->M;
	    fN = blasArgs->N;
	    fKL = blasArgs->KL;
	    fKU = blasArgs->KU;
	}

    INIT_KARG(&args[0], blasArgs->A); 	    //A - input matrix - argument
    INIT_KARG(&args[1], blasArgs->C);       //y - y vector
    INIT_KARG(&args[2], blasArgs->B);       //x - actual x vector argument

	initSizeKarg(&args[3], fM);
    initSizeKarg(&args[4], fN);
    initSizeKarg(&args[5], fKL);
    initSizeKarg(&args[6], fKU);

    initSizeKarg(&args[7], blasArgs->lda.matrix);
    inc = blasArgs->ldb.vector;
    INIT_KARG(&args[8], inc);
    inc = blasArgs->ldc.vector;
    INIT_KARG(&args[9], inc);

	initSizeKarg(&args[10], blasArgs->offa);
	initSizeKarg(&args[11], blasArgs->offBX);
	initSizeKarg(&args[12], blasArgs->offCY);

	// For GBMV, SBMV, HBMV both alpha and beta has to be passed.
	if( (blasArgs->pigFuncID == CLBLAS_GBMV) || (blasArgs->pigFuncID == CLBLAS_SBMV) || (blasArgs->pigFuncID == CLBLAS_HBMV) )
	{
		assignScalarKarg(&args[13], &(blasArgs->alpha), blasArgs->dtype);
		assignScalarKarg(&args[14], &(blasArgs->beta), blasArgs->dtype);
	}

	#ifdef DEBUG_GBMV
    printf("KL %d\tKU %d\n", fKL, fKU);
	#endif

	return;
}
Пример #4
0
/*
		(__global %TYPE const* restrict A, __global %TYPE * _xnew, __global %TYPE const* restrict _x_vector, uint N,
		int incx, int isUnity, uint lda, int doConj, uint offa, uint offx)
*/
static void
assignKargs(KernelArg *args, const void *params, const void* )
{
    CLBlasKargs *blasArgs = (CLBlasKargs*)params;

	//NOTE: This will not work if SolutionStep->args is not passed in const void *params.
	SolutionStep *step = container_of(blasArgs, args, SolutionStep);

	cl_int inc;
	cl_int unity, doConj;
    //bool incxOne = (blasArgs->ldb.vector == 1);
    //bool incyOne = (blasArgs->ldc.vector == 1);

    INIT_KARG(&args[0], blasArgs->A); 	//A - input matrix - argument
    if( (step->funcID == CLBLAS_HEMV) || (blasArgs->pigFuncID == CLBLAS_HPMV) || (blasArgs->pigFuncID == CLBLAS_SPMV) )
	{
		INIT_KARG(&args[1], blasArgs->C);   //y - since the 2nd argument is the result buffer, we should send y for HEMV
        INIT_KARG(&args[2], blasArgs->B);   //x - actual x vector argument
	}
	else
	{
		INIT_KARG(&args[1], blasArgs->B); 	//x - result buffer = _xnew argument
    	INIT_KARG(&args[2], blasArgs->C); 	//y - scratch == _x_vector argument
    }
	initSizeKarg(&args[3], blasArgs->N);
    inc = blasArgs->ldb.vector;
    INIT_KARG(&args[4], inc);
	unity = (blasArgs->diag == clblasUnit);
   	INIT_KARG(&args[5], unity);
    initSizeKarg(&args[6], blasArgs->lda.matrix);
	doConj = (blasArgs->transA == clblasConjTrans);

	#ifdef DEBUG_TRMV
	printf("doConj is : %d, unity is : %d, incx is : %d\n", doConj, unity, inc);
	#endif

   	INIT_KARG(&args[7], doConj);
	initSizeKarg(&args[8], blasArgs->offa);
	initSizeKarg(&args[9], blasArgs->offBX);

	// For HEMV both alpha and beta has to be passed.
	if( (step->funcID == CLBLAS_HEMV) || (blasArgs->pigFuncID == CLBLAS_HPMV) || (blasArgs->pigFuncID == CLBLAS_SPMV) )
	{
		inc = blasArgs->ldc.vector;
		INIT_KARG(&args[10], inc);
		initSizeKarg(&args[11], blasArgs->offCY);
		assignScalarKarg(&args[12], &(blasArgs->alpha), blasArgs->dtype);
		assignScalarKarg(&args[13], &(blasArgs->beta), blasArgs->dtype);
	}

	return;
}
Пример #5
0
static void
assignKargs(KernelArg *args, const void *params, const void *extra)
{
    const CLBlasKargs *blasArgs = (const CLBlasKargs*)params;
    KernelExtraFlags kflags = ((const CLBLASKernExtra*)extra)->flags;
    int idx;

    (void)extra;

    initSizeKarg(&args[0], blasArgs->M);
    initSizeKarg(&args[1], blasArgs->N);
    assignScalarKarg(&args[2], &(blasArgs->alpha), blasArgs->dtype);
    initMemobjKarg(&args[3], blasArgs->A, NULL, 0, 0);
    initSizeKarg(&args[4], blasArgs->lda.matrix);
    initMemobjKarg(&args[5], blasArgs->B, NULL, 0, 0);
    initMemobjKarg(&args[6], blasArgs->B, NULL, 0, 0); //C in kernel
    initSizeKarg(&args[7], blasArgs->ldb.matrix);
    idx = 8;
    if (kflags & KEXTRA_A_OFF_NOT_ZERO) {
        initSizeKarg(&args[idx++], blasArgs->offA);
    }
    if (kflags & KEXTRA_BX_OFF_NOT_ZERO) {
        initSizeKarg(&args[idx], blasArgs->offBX);
    }
}
Пример #6
0
static void
assignKargs(KernelArg *args, const void *params, const void *extra)
{
    const CLBlasKargs *blasArgs = (const CLBlasKargs*)params;

    (void)extra;

    switch (blasArgs->kernType) {
    case CLBLAS_COMPUTING_KERNEL:
        // arguments for computational kernel
        initSizeKarg(&args[0], blasArgs->M);
        initSizeKarg(&args[1], blasArgs->N);
        initSizeKarg(&args[2], blasArgs->K);
        assignScalarKarg(&args[3], &(blasArgs->alpha), blasArgs->dtype);
        INIT_KARG(&args[4], blasArgs->scimage[0]);
        INIT_KARG(&args[5], blasArgs->scimage[1]);
        assignScalarKarg(&args[6], &(blasArgs->beta), blasArgs->dtype);
        initMemobjKarg(&args[7], blasArgs->C, NULL, 0, 0);
        initSizeKarg(&args[8], blasArgs->ldc.matrix);
        initSizeKarg(&args[9], blasArgs->offCY);
        break;
    case CLBLAS_PREP_A_KERNEL:
        INIT_KARG(&args[0], blasArgs->order);
        INIT_KARG(&args[1], blasArgs->transA);
        initSizeKarg(&args[2], blasArgs->M);
        initSizeKarg(&args[3], blasArgs->K);
        initMemobjKarg(&args[4], blasArgs->A, NULL, 0, 0);
        initSizeKarg(&args[5], blasArgs->lda.matrix);
        INIT_KARG(&args[6], blasArgs->scimage[0]);
        initSizeKarg(&args[7], blasArgs->offA);
        break;
    case CLBLAS_PREP_B_KERNEL:
        INIT_KARG(&args[0], blasArgs->order);
        INIT_KARG(&args[1], blasArgs->transB);
        initSizeKarg(&args[2], blasArgs->N);
        initSizeKarg(&args[3], blasArgs->K);
        initMemobjKarg(&args[4], blasArgs->B, NULL, 0, 0);
        initSizeKarg(&args[5], blasArgs->ldb.matrix);
        INIT_KARG(&args[6], blasArgs->scimage[1]);
        initSizeKarg(&args[7], blasArgs->offBX);
        break;
    default:
        //this should not happen
        break;
    }
}
Пример #7
0
static void
assignKargs(KernelArg *args, const void *params, const void *extra)
{
    const CLBlasKargs *blasArgs = (const CLBlasKargs*)params;
    KernelExtraFlags kflags = ((const CLBLASKernExtra*)extra)->flags;
    cl_int inc;
    int i;

    initSizeKarg(&args[0], blasArgs->K);
    assignScalarKarg(&args[1], &(blasArgs->alpha), blasArgs->dtype);
    INIT_KARG(&args[2], blasArgs->A);
    INIT_KARG(&args[3], blasArgs->B);
    i = 4;
    if (!(kflags & KEXTRA_BETA_ZERO)) {
        assignScalarKarg(&args[i++], &(blasArgs->beta), blasArgs->dtype);
    }
    initMemobjKarg(&args[i++], blasArgs->C, NULL, 0, 0);
    initSizeKarg(&args[i++], blasArgs->lda.matrix);
    if (kflags & KEXTRA_A_OFF_NOT_ZERO) {
        initSizeKarg(&args[i++], blasArgs->offA);
    }
    if (kflags & KEXTRA_BX_OFF_NOT_ZERO) {
        initSizeKarg(&args[i++], blasArgs->offBX);
    }
    if (kflags & KEXTRA_CY_OFF_NOT_ZERO) {
        initSizeKarg(&args[i++], blasArgs->offCY);
    }
    if (!(kflags & KEXTRA_INCX_ONE)) {
        inc = blasArgs->ldb.vector;
        INIT_KARG(&args[i], inc);
        i++;
    }
    if (!(kflags & KEXTRA_INCY_ONE)) {
        inc = blasArgs->ldc.vector;
        INIT_KARG(&args[i], inc);
        i++;
    }

    initSizeKarg(&args[i++], blasArgs->offsetN);
    initSizeKarg(&args[i++], blasArgs->N); //Actual N
}
Пример #8
0
/*
	 ( __global %TYPE* _A, __global const %TYPE* _X, int N,
										int offx, int incx, int offa, int lda, %PTYPE alpha )
*/
static void
assignKargs(KernelArg *args, const void *params, const void*)
{
    CLBlasKargs *blasArgs = (CLBlasKargs*)params;
    cl_int incx;

    INIT_KARG(&args[0], blasArgs->A); 	//A - input/output matrix - argument
    INIT_KARG(&args[1], blasArgs->B); 	//x - x vector
    initSizeKarg(&args[2], blasArgs->N);
	initSizeKarg(&args[3], blasArgs->offBX);
    incx = blasArgs->ldb.vector;
    INIT_KARG(&args[4], incx);
    initSizeKarg(&args[5], blasArgs->offa);
	initSizeKarg(&args[6], blasArgs->lda.matrix);
	DataType alphaType = (blasArgs->dtype == TYPE_COMPLEX_FLOAT)? TYPE_FLOAT : TYPE_DOUBLE;
    assignScalarKarg(&args[7], &(blasArgs->alpha), alphaType);
	return;
}
Пример #9
0
/*
__kernel void %PREFIXaxpy_kernel( %TYPE _alpha, __global %TYPE *_X, __global %TYPE *_Y,
                                        uint N, uint offx, int incx, uint offy, int incy )

*/
static void
assignKargs(KernelArg *args, const void *params, const void* )
{
    CLBlasKargs *blasArgs = (CLBlasKargs*)params;
	cl_int incx, incy;

    assignScalarKarg(&args[0], &(blasArgs->alpha), blasArgs->dtype);
    INIT_KARG(&args[1], blasArgs->A);
	INIT_KARG(&args[2], blasArgs->B);
    initSizeKarg(&args[3], blasArgs->N);
    initSizeKarg(&args[4], blasArgs->offBX);
    incx = blasArgs->ldb.vector;
    INIT_KARG(&args[5], incx);
    initSizeKarg(&args[6], blasArgs->offCY);
    incy = blasArgs->ldc.vector;
    INIT_KARG(&args[7], incy);

	return;
}
Пример #10
0
/*
( __global %TYPE* _A, __global const %TYPE* _X, __global const %TYPE* _Y, int N,
				int offx, int incx, int offy, int incy, int offa, int lda, %TYPE alpha)
*/
static void
assignKargs(KernelArg *args, const void *params, const void*)
{
    CLBlasKargs *blasArgs = (CLBlasKargs*)params;
    cl_int inc;

    INIT_KARG(&args[0], blasArgs->A); 	//A - input/output matrix - argument
    INIT_KARG(&args[1], blasArgs->B); 	//X - x vector
	INIT_KARG(&args[2], blasArgs->C); 	//Y - y vector
	initSizeKarg(&args[3], blasArgs->N);
	initSizeKarg(&args[4], blasArgs->offBX);
    inc = blasArgs->ldb.vector;
    INIT_KARG(&args[5], inc);
	initSizeKarg(&args[6], blasArgs->offCY);
	inc = blasArgs->ldc.vector;
	INIT_KARG(&args[7], inc);
    initSizeKarg(&args[8], blasArgs->offa);
	initSizeKarg(&args[9], blasArgs->lda.matrix);
    assignScalarKarg(&args[10], &(blasArgs->alpha), blasArgs->dtype);
	return;
}