void CORE_dplrnt_quark(Quark *quark) { int m; int n; double *A; int lda; int bigM; int m0; int n0; unsigned long long int seed; quark_unpack_args_8( quark, m, n, A, lda, bigM, m0, n0, seed ); CORE_dplrnt( m, n, A, lda, bigM, m0, n0, seed ); }
/***************************************************************************//** * Parallel tile Cholesky factorization - static scheduling **/ void plasma_pdplrnt(plasma_context_t *plasma) { PLASMA_desc A; unsigned long long int seed; PLASMA_sequence *sequence; PLASMA_request *request; int m, n; int next_m; int next_n; int ldam; int tempmm, tempnn; plasma_unpack_args_4(A, seed, sequence, request); if (sequence->status != PLASMA_SUCCESS) return; n = 0; m = PLASMA_RANK; while (m >= A.mt) { n++; m = m - A.mt; } while ( n < A.nt ) { next_n = n; next_m = m; next_m += PLASMA_SIZE; while ( next_m >= A.mt && next_n < A.nt ) { next_n++; next_m = next_m - A.mt; } tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb; tempnn = n == A.nt-1 ? A.n-n*A.nb : A.nb; ldam = BLKLDD(A, m); CORE_dplrnt( tempmm, tempnn, A(m, n), ldam, A.m, m*A.mb, n*A.nb, seed ); m = next_m; n = next_n; } }
/***************************************************************************//** * Parallel tile matrix generation - dynamic scheduling * Same as previous function, without OpenMP pragma. Used to check solution. **/ void plasma_pdpltmg_seq(PLASMA_desc A, unsigned long long int seed) { int m, n; int ldam; int tempmm, tempnn; for (m = 0; m < A.mt; m++) { tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb; ldam = BLKLDD(A, m); for (n = 0; n < A.nt; n++) { tempnn = n == A.nt-1 ? A.n-n*A.nb : A.nb; double *dA = A(m, n); CORE_dplrnt(tempmm, tempnn, dA, ldam, A.m, m*A.mb, n*A.nb, seed); } } }
/***************************************************************************//** * Parallel tile matrix generation - dynamic scheduling **/ void plasma_pdpltmg_quark(PLASMA_desc A, unsigned long long int seed) { int m, n; int ldam; int tempmm, tempnn; for (m = 0; m < A.mt; m++) { tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb; ldam = BLKLDD(A, m); for (n = 0; n < A.nt; n++) { tempnn = n == A.nt-1 ? A.n-n*A.nb : A.nb; double *dA = A(m, n); hclib_pragma_marker("omp", "task depend(out:dA[0:tempnn*ldam])", "pragma38_omp_task"); CORE_dplrnt(tempmm, tempnn, dA, ldam, A.m, m*A.mb, n*A.nb, seed); } } }