Index: PBLAS/SRC/pblas.h =================================================================== --- PBLAS/SRC/pblas.h (revision 191) +++ PBLAS/SRC/pblas.h (working copy) @@ -42,6 +42,7 @@ */ #include #include +#include #ifdef __STDC__ #include Index: PBLAS/SRC/PTOOLS/PB_CpgemmAB.c =================================================================== --- PBLAS/SRC/PTOOLS/PB_CpgemmAB.c (revision 191) +++ PBLAS/SRC/PTOOLS/PB_CpgemmAB.c (working copy) @@ -269,7 +269,7 @@ Cjj, Cld, Cmb, Cmp, Cnb, Cnq, Crow, WAfr, WAsum, WBfr, WBsum, Wkbb=0, ctxt, k, kb, kbb, lcmb, maxp, maxpm1, maxq, mycol, myrow, ncpq, nota, notb, npcol, npq=0, nprow, nrpq, p=0, q=0, - size, tmp; + size, tmp, AkbD, BkbD; GEMM_T gemm; /* * .. Local Arrays .. @@ -365,7 +365,7 @@ { AiD = IA; AinbD = DESCA[IMB_]; AnbD = DESCA[MB_]; Ald = DESCA[LLD_]; AmyprocD = myrow; AmyprocR = mycol; - AnprocsD = nprow; + AnprocsD = nprow; AkbD = DESCA[NB_]; PB_Cinfog2l( IA, JA, DESCA, AnprocsD, AnprocsR, AmyprocD, AmyprocR, &AiiD, &AiiR, &ArocD, &ArocR ); } @@ -373,7 +373,7 @@ { AiD = JA; AinbD = DESCA[INB_]; AnbD = DESCA[NB_]; Ald = DESCA[LLD_]; AmyprocD = mycol; AmyprocR = myrow; - AnprocsD = npcol; + AnprocsD = npcol; AkbD = DESCA[MB_]; PB_Cinfog2l( IA, JA, DESCA, AnprocsR, AnprocsD, AmyprocR, AmyprocD, &AiiR, &AiiD, &ArocR, &ArocD ); } @@ -386,7 +386,7 @@ { BiD = JB; BinbD = DESCB[INB_]; BnbD = DESCB[NB_]; Bld = DESCB[LLD_]; BmyprocD = mycol; BmyprocR = myrow; - BnprocsD = npcol; + BnprocsD = npcol; BkbD = DESCB[MB_]; PB_Cinfog2l( IB, JB, DESCB, BnprocsR, BnprocsD, BmyprocR, BmyprocD, &BiiR, &BiiD, &BrocR, &BrocD ); } @@ -394,7 +394,7 @@ { BiD = IB; BinbD = DESCB[IMB_]; BnbD = DESCB[MB_]; Bld = DESCB[LLD_]; BmyprocD = myrow; BmyprocR = mycol; - BnprocsD = nprow; + BnprocsD = nprow; BkbD = DESCB[NB_]; PB_Cinfog2l( IB, JB, DESCB, BnprocsD, BnprocsR, BmyprocD, BmyprocR, &BiiD, &BiiR, &BrocD, &BrocR ); } @@ -402,6 +402,11 @@ BnpD = PB_Cnumroc( N, 0, Binb1D, BnbD, BmyprocD, BrocD, BnprocsD ); Binb1R = PB_Cfirstnb( K, BiR, BinbR, BnbR ); BisR = ( ( BsrcR < 0 ) || ( BnprocsR == 1 ) ); + + while (((long long int)(kb)*AnpD*TYPE->size > INT_MAX || + (long long int)(kb)*BnpD*TYPE->size > INT_MAX) && (kb>1)) + kb=kb/2; + kb = MIN(MAX(AkbD,BkbD),kb); /* * When sub( A ) is not replicated and backward pass on sub( A ), find the * virtual process q owning the last row or column of sub( A ).