Commit b7731f39 authored by PRUVOST Florent's avatar PRUVOST Florent

distribute data needed for ibnb and block-diagonal workspaces

parent b57517dc
......@@ -104,7 +104,7 @@ void morse_pzgelqf(MORSE_desc_t *A, MORSE_desc_t *T,
/* necessary to avoid dependencies between tslqt and unmlq tasks regarding the diag tile */
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, (minMT-1)*A->mb, A->nb, 0, 0, (minMT-1)*A->mb, A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, (minMT-1)*A->mb, A->nb, 0, 0, (minMT-1)*A->mb, A->nb, A->p, A->q);
for (k = 0; k < min(A->mt, A->nt); k++) {
tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
......
......@@ -107,7 +107,7 @@ void morse_pzgelqfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
/* necessary to avoid dependencies between tasks regarding the diag tile */
nblk = ( A->nt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
for (k = 0; k < min(A->mt, A->nt); k++) {
tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
......
......@@ -99,7 +99,7 @@ void morse_pzgeqrf(MORSE_desc_t *A, MORSE_desc_t *T,
/* necessary to avoid dependencies between tsqrt and unmqr tasks regarding the diag tile */
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, min(A->m, A->n), A->nb, 0, 0, min(A->m, A->n), A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, min(A->m, A->n), A->nb, 0, 0, min(A->m, A->n), A->nb, A->p, A->q);
for (k = 0; k < minMNT; k++) {
tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
......
......@@ -105,7 +105,7 @@ void morse_pzgeqrfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
/* necessary to avoid dependencies between tasks regarding the diag tile */
nblk = ( A->mt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
K = min(A->mt, A->nt);
for (k = 0; k < K; k++) {
......
......@@ -75,7 +75,7 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
/* necessary to avoid dependencies between tasks regarding the diag tile */
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, min(A->m, A->n), A->nb, 0, 0, min(A->m, A->n), A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, min(A->m, A->n), A->nb, 0, 0, min(A->m, A->n), A->nb, A->p, A->q);
for (k = 0; k < minMNT; k++) {
tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
......
......@@ -93,7 +93,7 @@ void morse_pzunglq(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T,
/* necessary to avoid dependencies between tasks regarding the diag tile */
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, minMT*A->mb, A->nb, 0, 0, minMT*A->mb, A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, minMT*A->mb, A->nb, 0, 0, minMT*A->mb, A->nb, A->p, A->q);
for (k = min(A->mt, A->nt)-1; k >= 0; k--) {
tempAkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
......
......@@ -92,7 +92,7 @@ void morse_pzunglqrh(MORSE_desc_t *A, MORSE_desc_t *Q,
/* necessary to avoid dependencies between tasks regarding the diag tile */
nblk = ( A->nt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
K = min(A->mt, A->nt);
for (k = K-1; k >= 0; k--) {
......
......@@ -87,7 +87,7 @@ void morse_pzungqr(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T,
/* necessary to avoid dependencies between tasks regarding the diag tile */
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, min(A->m, A->n), A->nb, 0, 0, min(A->m, A->n), A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, min(A->m, A->n), A->nb, 0, 0, min(A->m, A->n), A->nb, A->p, A->q);
for (k = min(A->mt, A->nt)-1; k >= 0; k--) {
tempAkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
......
......@@ -94,7 +94,7 @@ void morse_pzungqrrh(MORSE_desc_t *A, MORSE_desc_t *Q,
/* necessary to avoid dependencies between tasks regarding the diag tile */
nblk = ( A->mt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
K = min(A->mt, A->nt);
for (k = K-1; k >= 0; k--) {
......
......@@ -95,7 +95,7 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
/* necessary to avoid dependencies between tasks regarding the diag tile */
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, minMT*A->mb, A->nb, 0, 0, minMT*A->mb, A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, minMT*A->mb, A->nb, 0, 0, minMT*A->mb, A->nb, A->p, A->q);
if (side == MorseLeft ) {
if (trans == MorseNoTrans) {
......
......@@ -94,7 +94,7 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
/* necessary to avoid dependencies between tasks regarding the diag tile */
nblk = ( A->nt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
K = min(A->mt, A->nt);
if (side == MorseLeft ) {
......
......@@ -87,7 +87,7 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
/* necessary to avoid dependencies between tasks regarding the diag tile */
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, min(A->m, A->n), A->nb, 0, 0, min(A->m, A->n), A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, min(A->m, A->n), A->nb, 0, 0, min(A->m, A->n), A->nb, A->p, A->q);
if (A->m > A->n) {
minM = A->n;
......
......@@ -94,7 +94,7 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
/* necessary to avoid dependencies between tasks regarding the diag tile */
nblk = ( A->mt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc2(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
K = min(A->mt, A->nt);
if (side == MorseLeft ) {
......
......@@ -199,7 +199,7 @@ int MORSE_zgeqrf_Tile(MORSE_desc_t *A, MORSE_desc_t *T)
MORSE_zgeqrf_Tile_Async(A, T, sequence, &request);
RUNTIME_barrier(morse);
RUNTIME_desc_getoncpu(A);
status = sequence->status;
morse_sequence_destroy(morse, sequence);
return status;
......
......@@ -220,8 +220,9 @@ int MORSE_zgeqrs_Tile(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B)
MORSE_zgeqrs_Tile_Async(A, T, B, sequence, &request);
RUNTIME_barrier(morse);
RUNTIME_desc_getoncpu(A);
RUNTIME_desc_getoncpu(B);
RUNTIME_desc_getoncpu(T);
RUNTIME_desc_getoncpu(B);
status = sequence->status;
morse_sequence_destroy(morse, sequence);
return status;
......
......@@ -31,10 +31,10 @@
/***************************************************************************//**
* Macro for matrix conversion / Lapack interface
**/
#define morse_zdesc_alloc2(descA, mb, nb, lm, ln, i, j, m, n) \
descA = morse_desc_init( \
MorseComplexDouble, (mb), (nb), ((mb)*(nb)), \
(m), (n), (i), (j), (m), (n), 1, 1); \
#define morse_zdesc_alloc_diag(descA, mb, nb, lm, ln, i, j, m, n, p, q) \
descA = morse_desc_init_diag( \
MorseComplexDouble, (mb), (nb), ((mb)*(nb)), \
(m), (n), (i), (j), (m), (n), p, q); \
morse_desc_mat_alloc( &(descA) );
#define morse_zdesc_alloc( descA, mb, nb, lm, ln, i, j, m, n, free) \
......
......@@ -127,6 +127,95 @@ MORSE_desc_t morse_desc_init(MORSE_enum dtyp, int mb, int nb, int bsiz,
return desc;
}
/*******************************************************************************
* Internal static descriptor initializer for a block diagonal matrix
**/
MORSE_desc_t morse_desc_init_diag(MORSE_enum dtyp, int mb, int nb, int bsiz,
int lm, int ln, int i, int j,
int m, int n, int p, int q)
{
MORSE_desc_t desc;
desc.get_blkaddr = morse_getaddr_ccrb;
desc.get_blkldd = morse_getblkldd_ccrb;
desc.get_rankof = morse_getrankof_2d_diag;
// Matrix properties
desc.dtyp = dtyp;
// seems useless
//desc.styp = MorseCCRB;
desc.mb = mb;
desc.nb = nb;
desc.bsiz = bsiz;
// Large matrix parameters
desc.lm = lm;
desc.ln = ln;
// Large matrix derived parameters
desc.lmt = (lm%mb==0) ? (lm/mb) : (lm/mb+1);
desc.lnt = (ln%nb==0) ? (ln/nb) : (ln/nb+1);
// Submatrix parameters
desc.i = i;
desc.j = j;
desc.m = m;
desc.n = n;
// Submatrix derived parameters
desc.mt = (m == 0) ? 0 : (i+m-1)/mb - i/mb + 1;
desc.nt = (n == 0) ? 0 : (j+n-1)/nb - j/nb + 1;
desc.id = nbdesc; nbdesc++;
desc.occurences = 0;
desc.use_mat = 1;
desc.alloc_mat = 1;
desc.register_mat = 1;
#if defined(CHAMELEON_USE_MPI)
MPI_Comm_rank( MPI_COMM_WORLD, &(desc.myrank) );
#else
desc.myrank = 0;
#endif
// Grid size
desc.p = p;
desc.q = q;
// Local dimensions in tiles
if ( desc.myrank < (p*q) ) {
desc.llmt = (desc.lmt + p - 1) / p;
desc.llnt = (desc.lnt + q - 1) / q;
// Local dimensions
if ( ((desc.lmt-1) % p) == (desc.myrank / q) ) {
desc.llm = ( desc.llmt - 1 ) * mb + ((lm%mb==0) ? mb : (lm%mb));
} else {
desc.llm = desc.llmt * mb;
}
if ( ((desc.lnt-1) % q) == (desc.myrank % q) ) {
desc.lln = ( desc.llnt - 1 ) * nb + ((ln%nb==0) ? nb : (ln%nb));
} else {
desc.lln = desc.llnt * nb;
}
desc.llm1 = (desc.llm/mb);
desc.lln1 = (desc.lln/nb);
} else {
desc.llmt = 0;
desc.llnt = 0;
desc.llm = 0;
desc.lln = 0;
desc.llm1 = 0;
desc.lln1 = 0;
}
// Matrix address
desc.mat = NULL;
desc.A21 = (size_t)(desc.llm - desc.llm%mb)*(size_t)(desc.lln - desc.lln%nb);
desc.A12 = (size_t)( desc.llm%mb)*(size_t)(desc.lln - desc.lln%nb) + desc.A21;
desc.A22 = (size_t)(desc.llm - desc.llm%mb)*(size_t)( desc.lln%nb) + desc.A12;
RUNTIME_desc_init( &desc );
return desc;
}
/*******************************************************************************
* Static descriptor initializer for users
**/
......@@ -386,6 +475,12 @@ int morse_desc_mat_free( MORSE_desc_t *desc )
* @param[in] n
* Number of columns of the submatrix.
*
* @param[in] p
* 2D-block cyclic distribution in rows.
*
* @param[in] q
* 2D-block cyclic distribution in columns.
*
******************************************************************************
*
* @return
......
......@@ -47,9 +47,12 @@ inline static int morse_getblkldd_ccrb(const MORSE_desc_t *A, int m);
* Data distributions
*/
inline static int morse_getrankof_2d(const MORSE_desc_t *desc, int m, int n);
inline static int morse_getrankof_2d_diag(const MORSE_desc_t *desc, int m, int n);
MORSE_desc_t morse_desc_init(MORSE_enum dtyp, int mb, int nb, int bsiz,
int lm, int ln, int i, int j, int m, int n, int p, int q);
MORSE_desc_t morse_desc_init_diag(MORSE_enum dtyp, int mb, int nb, int bsiz,
int lm, int ln, int i, int j, int m, int n, int p, int q);
MORSE_desc_t morse_desc_init_user(MORSE_enum dtyp, int mb, int nb, int bsiz,
int lm, int ln, int i, int j,
int m, int n, int p, int q,
......@@ -169,6 +172,15 @@ inline static int morse_getrankof_2d(const MORSE_desc_t *desc, int m, int n)
return (m % desc->p) * desc->q + (n % desc->q);
}
/*******************************************************************************
* Internal function to return MPI rank of element DIAG(m,0)
**/
inline static int morse_getrankof_2d_diag(const MORSE_desc_t *desc, int m, int n)
{
return (m % desc->p) * desc->q + (m % desc->q);
}
/*******************************************************************************
* Detect if the tile is local or not
**/
......
......@@ -891,23 +891,23 @@ void MORSE_ZUNMQR_TILE_ASYNC(MORSE_enum *side, MORSE_enum *trans, MORSE_desc_t *
//void MORSE_ALLOC_WORKSPACE_ZGEHRD(int *N, MORSE_desc_t **descT, int *info)
//{ *info = MORSE_Alloc_Workspace_zgehrd(*N, descT); }
void MORSE_ALLOC_WORKSPACE_ZGELQF(int *M, int *N, MORSE_desc_t **T, int *info)
{ *info = MORSE_Alloc_Workspace_zgelqf(*M, *N, T); }
void MORSE_ALLOC_WORKSPACE_ZGELQF(int *M, int *N, MORSE_desc_t **T, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgelqf(*M, *N, T, *p, *q); }
void MORSE_ALLOC_WORKSPACE_ZGELQF_TILE(int *M, int *N, MORSE_desc_t **descT, int *info)
{ *info = MORSE_Alloc_Workspace_zgelqf_Tile(*M, *N, descT); }
void MORSE_ALLOC_WORKSPACE_ZGELQF_TILE(int *M, int *N, MORSE_desc_t **descT, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgelqf_Tile(*M, *N, descT, *p, *q); }
void MORSE_ALLOC_WORKSPACE_ZGELS(int *M, int *N, MORSE_desc_t **T, int *info)
{ *info = MORSE_Alloc_Workspace_zgels(*M, *N, T); }
void MORSE_ALLOC_WORKSPACE_ZGELS(int *M, int *N, MORSE_desc_t **T, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgels(*M, *N, T, *p, *q); }
void MORSE_ALLOC_WORKSPACE_ZGELS_TILE(int *M, int *N, MORSE_desc_t **descT, int *info)
{ *info = MORSE_Alloc_Workspace_zgels_Tile(*M, *N, descT); }
void MORSE_ALLOC_WORKSPACE_ZGELS_TILE(int *M, int *N, MORSE_desc_t **descT, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgels_Tile(*M, *N, descT, *p, *q); }
void MORSE_ALLOC_WORKSPACE_ZGEQRF(int *M, int *N, MORSE_desc_t **T, int *info)
{ *info = MORSE_Alloc_Workspace_zgeqrf(*M, *N, T); }
void MORSE_ALLOC_WORKSPACE_ZGEQRF(int *M, int *N, MORSE_desc_t **T, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgeqrf(*M, *N, T, *p, *q); }
void MORSE_ALLOC_WORKSPACE_ZGEQRF_TILE(int *M, int *N, MORSE_desc_t **descT, int *info)
{ *info = MORSE_Alloc_Workspace_zgeqrf_Tile(*M, *N, descT); }
void MORSE_ALLOC_WORKSPACE_ZGEQRF_TILE(int *M, int *N, MORSE_desc_t **descT, int *p, int *q, int *info)
{ *info = MORSE_Alloc_Workspace_zgeqrf_Tile(*M, *N, descT, *p, *q); }
void MORSE_ALLOC_WORKSPACE_ZGESV_INCPIV(int *N, MORSE_desc_t **descL, int **IPIV, int *info)
{ *info = MORSE_Alloc_Workspace_zgesv_incpiv(*N, descL, IPIV); }
......
......@@ -2751,7 +2751,7 @@ module morse_z
! FORTRAN API - workspace allocation
!
interface
function MORSE_Alloc_Workspace_zgebrd_c(M,N,descT) &
function MORSE_Alloc_Workspace_zgebrd_c(M,N,descT,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zgebrd')
use iso_c_binding
implicit none
......@@ -2759,33 +2759,39 @@ module morse_z
integer(kind=c_int), value :: M
integer(kind=c_int), value :: N
type(c_ptr) :: descT ! descT is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zgebrd_c
end interface
interface
function MORSE_Alloc_Workspace_zgeev_c(N,descT) &
function MORSE_Alloc_Workspace_zgeev_c(N,descT,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zgeev')
use iso_c_binding
implicit none
integer(kind=c_int) :: MORSE_Alloc_Workspace_zgeev_c
integer(kind=c_int), value :: N
type(c_ptr) :: descT ! descT is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zgeev_c
end interface
interface
function MORSE_Alloc_Workspace_zgehrd_c(N,descT) &
function MORSE_Alloc_Workspace_zgehrd_c(N,descT,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zgehrd')
use iso_c_binding
implicit none
integer(kind=c_int) :: MORSE_Alloc_Workspace_zgehrd_c
integer(kind=c_int), value :: N
type(c_ptr) :: descT ! descT is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zgehrd_c
end interface
interface
function MORSE_Alloc_Workspace_zgelqf_c(M,N,T) &
function MORSE_Alloc_Workspace_zgelqf_c(M,N,T,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zgelqf')
use iso_c_binding
implicit none
......@@ -2793,11 +2799,13 @@ module morse_z
integer(kind=c_int), value :: M
integer(kind=c_int), value :: N
type(c_ptr) :: T ! T is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zgelqf_c
end interface
interface
function MORSE_Alloc_Workspace_zgelqf_Tile_c(M,N,descT) &
function MORSE_Alloc_Workspace_zgelqf_Tile_c(M,N,descT,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zgelqf_Tile')
use iso_c_binding
implicit none
......@@ -2805,11 +2813,13 @@ module morse_z
integer(kind=c_int), value :: M
integer(kind=c_int), value :: N
type(c_ptr) :: descT ! descT is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zgelqf_Tile_c
end interface
interface
function MORSE_Alloc_Workspace_zgels_c(M,N,T) &
function MORSE_Alloc_Workspace_zgels_c(M,N,T,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zgels')
use iso_c_binding
implicit none
......@@ -2817,11 +2827,13 @@ module morse_z
integer(kind=c_int), value :: M
integer(kind=c_int), value :: N
type(c_ptr) :: T ! T is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zgels_c
end interface
interface
function MORSE_Alloc_Workspace_zgels_Tile_c(M,N,descT) &
function MORSE_Alloc_Workspace_zgels_Tile_c(M,N,descT,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zgels_Tile')
use iso_c_binding
implicit none
......@@ -2829,11 +2841,13 @@ module morse_z
integer(kind=c_int), value :: M
integer(kind=c_int), value :: N
type(c_ptr) :: descT ! descT is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zgels_Tile_c
end interface
interface
function MORSE_Alloc_Workspace_zgeqrf_c(M,N,T) &
function MORSE_Alloc_Workspace_zgeqrf_c(M,N,T,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zgeqrf')
use iso_c_binding
implicit none
......@@ -2841,11 +2855,13 @@ module morse_z
integer(kind=c_int), value :: M
integer(kind=c_int), value :: N
type(c_ptr) :: T ! T is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zgeqrf_c
end interface
interface
function MORSE_Alloc_Workspace_zgeqrf_Tile_c(M,N,descT) &
function MORSE_Alloc_Workspace_zgeqrf_Tile_c(M,N,descT,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zgeqrf_Tile')
use iso_c_binding
implicit none
......@@ -2853,6 +2869,8 @@ module morse_z
integer(kind=c_int), value :: M
integer(kind=c_int), value :: N
type(c_ptr) :: descT ! descT is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zgeqrf_Tile_c
end interface
......@@ -2881,7 +2899,7 @@ module morse_z
end interface
interface
function MORSE_Alloc_Workspace_zgesvd_c(M,N,descT) &
function MORSE_Alloc_Workspace_zgesvd_c(M,N,descT,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zgesvd')
use iso_c_binding
implicit none
......@@ -2889,6 +2907,8 @@ module morse_z
integer(kind=c_int), value :: M
integer(kind=c_int), value :: N
type(c_ptr) :: descT ! descT is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zgesvd_c
end interface
......@@ -2929,7 +2949,7 @@ module morse_z
end interface
interface
function MORSE_Alloc_Workspace_zheev_c(M,N,descT) &
function MORSE_Alloc_Workspace_zheev_c(M,N,descT,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zheev')
use iso_c_binding
implicit none
......@@ -2937,11 +2957,13 @@ module morse_z
integer(kind=c_int), value :: M
integer(kind=c_int), value :: N
type(c_ptr) :: descT ! descT is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zheev_c
end interface
interface
function MORSE_Alloc_Workspace_zheevd_c(M,N,descT) &
function MORSE_Alloc_Workspace_zheevd_c(M,N,descT,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zheevd')
use iso_c_binding
implicit none
......@@ -2949,11 +2971,13 @@ module morse_z
integer(kind=c_int), value :: M
integer(kind=c_int), value :: N
type(c_ptr) :: descT ! descT is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zheevd_c
end interface
interface
function MORSE_Alloc_Workspace_zhegv_c(M,N,descT) &
function MORSE_Alloc_Workspace_zhegv_c(M,N,descT,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zhegv')
use iso_c_binding
implicit none
......@@ -2961,11 +2985,13 @@ module morse_z
integer(kind=c_int), value :: M
integer(kind=c_int), value :: N
type(c_ptr) :: descT ! descT is **, so pass by reference
integer(kind=c_int), value :: p
integer(kind=c_int), value :: q
end function MORSE_Alloc_Workspace_zhegv_c
end interface
interface
function MORSE_Alloc_Workspace_zhegvd_c(M,N,descT) &
function MORSE_Alloc_Workspace_zhegvd_c(M,N,descT,p,q) &
& bind(c, name='MORSE_Alloc_Workspace_zhegvd')