Example #1
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);
    }
}
Example #2
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;
    }
}
Example #3
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
}