21 #define DEP(m) &(DEP[m])
22 #define A(_m, _n) (double *)plasma_geteltaddr(&A, (_m), (_n), eltsize)
34 static double dzero = (double) 0.0;
38 static double zone = (double) 1.0;
39 static double zzero = (double) 0.0;
42 int M, N, NB, MINMN, INgrsiz, INthgrsiz, BAND;
43 int myid, grsiz, shift=3, stt, st, ed, stind, edind;
44 int blklastind, colpt, PCOL, ACOL, MCOL;
45 int stepercol,mylastid,grnb,grid;
48 int thgrsiz, thgrnb, thgrid, thed;
68 memset(D, 0, MINMN *
sizeof(
double));
69 memset(E, 0, (MINMN-1)*
sizeof(
double));
71 for (i=0; i<MINMN; i++)
74 for (i=0; i<MINMN; i++)
102 memset(D, 0, MINMN*
sizeof(
double));
103 memset(E, 0, (MINMN-1)*
sizeof(
double));
106 for (i=0; i<(MINMN-1); i++)
110 *
A((i+1), i) = zzero;
111 LAPACKE_dlarfg_work( 2,
A(i, i), &V, 1, &TAU);
116 *
A(i, i+1) = - V * TAU * (*
A(i+1, i+1));
117 *
A(i+1, i+1) = *(
A(i+1, i+1)) * (zone - V * ztmp);
126 for (i=0; i<MINMN; i++)
128 ztmp = *
A(i, i) * (ztmp);
129 absztmp = fabs(ztmp);
132 ztmp = (double) (ztmp / absztmp);
136 ztmp = *
A(i, (i+1)) * (ztmp);
137 absztmp = fabs(ztmp);
140 ztmp = (double) (ztmp / absztmp);
146 for (i=0; i < MINMN-1; i++) {
163 double *work, *taup, *tauq;
164 int info, ldwork = N*N;
169 info = LAPACKE_dgebrd_work(LAPACK_COL_MAJOR, M, N,
170 A(0,0), A.
lm, D, E, taup, tauq, work, ldwork);
187 memset(MAXID,0,(MINMN+1)*
sizeof(
int));
200 else if( NB > 100 ) {
213 if( grsiz == 0 ) grsiz = 6;
214 if( thgrsiz == 0 ) thgrsiz = MINMN;
217 stepercol = i*grsiz == shift ? i:i+1;
219 i = (MINMN-2)/thgrsiz;
220 thgrnb = i*thgrsiz == (MINMN-2) ? i:i+1;
222 for (thgrid = 1; thgrid<=thgrnb; thgrid++){
223 stt = (thgrid-1)*thgrsiz+1;
224 thed =
min( (stt + thgrsiz -1), (MINMN-2));
225 for (i = stt; i <= MINMN-2; i++){
228 for (m = 1; m <=stepercol; m++){
230 for (j = st; j <=ed; j++){
234 myid = (i-j)*(stepercol*grsiz) +(m-1)*grsiz + 1;
235 mylastid = myid+grsiz-1;
236 PCOL = mylastid+shift-1;
238 PCOL =
min(PCOL,MAXID[j-1]);
240 grid = grnb*grsiz == PCOL ? grnb:grnb+1;
241 PCOL = (grid-1)*grsiz +1;
247 plasma->
quark, &task_flags,
249 &A, C, S, i, j, m, grsiz, BAND,
250 DEP(PCOL),
DEP(ACOL),
DEP(MCOL) );
253 blklastind = (mylastid/2)*NB+1+j-1;
255 colpt = ((mylastid+1)/2)*NB + 1 +j -1 ;
257 edind =
min(colpt,MINMN);
258 if( (stind>=edind-1) && (edind==MINMN) )
263 if(blklastind >= (MINMN-1)) stt=stt+1;
285 memset(D, 0, MINMN*
sizeof(
double));
286 memset(E, 0, (MINMN-1)*
sizeof(
double));
297 for (i=0; i<(MINMN-1); i++)
301 *
A((i+1), i) = zzero;
302 LAPACKE_dlarfg_work( 2,
A(i, i), &V, 1, &TAU);
307 *
A(i, (i+1)) = - V * TAU * (*
A((i+1), (i+1)));
308 *
A((i+1), (i+1)) = (*
A((i+1), (i+1))) * (zone - V * ztmp);
327 for (i=0; i < MINMN-1; i++) {
337 E[i] = fabs( *
A(i, i+1));
339 D[i] = fabs( *
A(i, i) );
341 for (i=0; i < MINMN-1; i++) {