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); } }
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; } }
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 }