48 #include "control/common.h"    54 #define A(m,n) A,  m,  n    55 #define B(m,n) B,  m,  n    70                          MORSE_sequence_t *sequence, MORSE_request_t *request)
    73         printf(
"%d:%s rk:%d maxrk:%d acc:%e alpha:%e\n",
    75                 rk, maxrk, acc, alpha);
    77     MORSE_desc_t* 
A = 
AUV;
    78     MORSE_desc_t* 
B = 
BUV;
    80     MORSE_context_t *morse;
    81     MORSE_option_t options;
    84     int ldak, ldam, ldan, ldbk, ldbm;
    85     int tempkm, tempkn, tempmm, tempnn;
    87     double zone       = (double) 1.0;
    88     double mzone      = (double)-1.0;
    89     double minvalpha  = (double)-1.0 / alpha;
    92     morse = morse_context_self();
    93     if (sequence->status != MORSE_SUCCESS)
    95     RUNTIME_options_init(&options, morse, sequence, request);
    99         2 * AD->mb * 2 * maxrk   
   103         + (2*maxrk) * (2*maxrk)    
   106     ws_worker *= 
sizeof(double); 
   108     RUNTIME_options_ws_alloc( &options, ws_worker, ws_host );
   112     if (
side == MorseLeft) {
   113         if (
uplo == MorseUpper) {
   114             assert(
"Not implemented yet" == 0);
   115             if (
trans == MorseNoTrans) {
   116                 for (k = 0; k < 
B->mt; k++) {
   117                     tempkm = k == 0 ? 
B->m-(
B->mt-1)*
B->mb : 
B->mb;
   118                     ldak = BLKLDD(
A, 
B->mt-1-k);
   119                     ldbk = BLKLDD(
B, 
B->mt-1-k);
   120                     lalpha = k == 0 ? alpha : zone;
   121                     for (n = 0; n < 
B->nt; n++) {
   122                         tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   126                             tempkm, tempnn, 
A->mb,
   127                             lalpha, 
A(
B->mt-1-k, 
B->mt-1-k), ldak,  
   128                                     B(
B->mt-1-k,        n), ldbk); 
   131                     RUNTIME_data_flush( sequence, 
A(
B->mt-1-k, 
B->mt-1-k) );
   132                     for (m = k+1; m < 
B->mt; m++) {
   133                         ldam = BLKLDD(
A, 
B->mt-1-m);
   134                         ldbm = BLKLDD(
B, 
B->mt-1-m);
   135                         for (n = 0; n < 
B->nt; n++) {
   136                             tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   139                                 MorseNoTrans, MorseNoTrans,
   140                                 B->mb, tempnn, tempkm, 
A->mb,
   141                                 mzone,  
A(
B->mt-1-m, 
B->mt-1-k), ldam,
   142                                         B(
B->mt-1-k, n       ), ldbk,
   143                                 lalpha, 
B(
B->mt-1-m, n       ), ldbm);
   146                         RUNTIME_data_flush( sequence, 
A(
B->mt-1-m, 
B->mt-1-k) );
   148                     for (n = 0; n < 
B->nt; n++) {
   150                         RUNTIME_data_flush( sequence, 
B(
B->mt-1-k, n) );
   158                 for (k = 0; k < 
B->mt; k++) {
   159                     tempkm = k == 
B->mt-1 ? 
B->m-k*
B->mb : 
B->mb;
   162                     lalpha = k == 0 ? alpha : zone;
   163                     for (n = 0; n < 
B->nt; n++) {
   164                         tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   168                             tempkm, tempnn, 
A->mb,
   169                             lalpha, 
A(k, k), ldak,
   173                     RUNTIME_data_flush( sequence, 
A(k, k) );
   174                     for (m = k+1; m < 
B->mt; m++) {
   175                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   177                         for (n = 0; n < 
B->nt; n++) {
   178                             tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   182                                 tempmm, tempnn, 
B->mb, 
A->mb,
   183                                 mzone,  
A(k, m), ldak,
   185                                 lalpha, 
B(m, n), ldbm);
   188                         RUNTIME_data_flush( sequence, 
A(k, m) );
   190                     for (n = 0; n < 
B->nt; n++) {
   192                         RUNTIME_data_flush( sequence, 
B(k, n) );
   202             if (
trans == MorseNoTrans) {
   205                 for (k = 0; k < 
B->mt; k++) {
   206                     int ldbkuv = BLKLDD(
BUV, k);
   207                     int ldakd = BLKLDD(AD, k);
   208                     tempkm = k == 
B->mt-1 ? 
B->m-k*
B->mb : 
B->mb;
   211                     lalpha = k == 0 ? alpha : zone;
   212                     for (n = 0; n < 
B->nt; n++) {
   213                         tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   218                             tempkm, tempnn, 
A->mb,
   219                             lalpha, 
A(k, k), ldak,
   236                     RUNTIME_data_flush( sequence, 
A(k, k) );
   237                     for (m = k+1; m < 
B->mt; m++) {
   238                         int ldamuv = BLKLDD(
AUV, m);
   239                         int ldbmuv = BLKLDD(
BUV, m);
   240                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   243                         for (n = 0; n < 
B->nt; n++) {
   244                             tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   248                                 MorseNoTrans, MorseNoTrans,
   249                                 tempmm, tempnn, 
B->mb, 
A->mb,
   250                                 mzone,  
A(m, k), ldam,
   252                                 lalpha, 
B(m, n), ldbm);
   256                                     MorseNoTrans, MorseNoTrans,
   260                                     AUV, Ark, m, k, ldamuv,
   261                                     BUV, Brk, k, n, ldbkuv,  
   263                                     BUV, Brk, m, n, ldbmuv,
   268                         RUNTIME_data_flush( sequence, 
A(m, k) );
   270                     for (n = 0; n < 
B->nt; n++) {
   272                         RUNTIME_data_flush( sequence, 
B(k, n) );
   282                 for (k = 0; k < 
B->mt; k++) {
   283                     int ldakuv = BLKLDD(
AUV, 
B->mt-1-k);
   284                     int ldbkuv = BLKLDD(
BUV, 
B->mt-1-k);
   285                     int ldakd = BLKLDD(AD, 
B->mt-1-k);
   286                     tempkm = k == 0 ? 
B->m-(
B->mt-1)*
B->mb : 
B->mb;
   287                     ldak = BLKLDD(
A, 
B->mt-1-k);
   288                     ldbk = BLKLDD(
B, 
B->mt-1-k);
   289                     lalpha = k == 0 ? alpha : zone;
   290                     for (n = 0; n < 
B->nt; n++) {
   291                         tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   296                             tempkm, tempnn, 
A->mb,
   297                             lalpha, 
A(
B->mt-1-k, 
B->mt-1-k), ldak,
   298                                     B(
B->mt-1-k,        n), ldbk);
   305                                 lalpha, AD, 
B->mt-1-k, 
   314                     RUNTIME_data_flush( sequence, 
A(
B->mt-1-k, 
B->mt-1-k) );
   315                     for (m = k+1; m < 
B->mt; m++) {
   316                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   317                         ldbm = BLKLDD(
B, 
B->mt-1-m);
   318                         int ldbmuv = BLKLDD(
BUV, 
B->mt-1-m);
   319                         for (n = 0; n < 
B->nt; n++) {
   320                             tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   325                                 B->mb, tempnn, tempkm, 
A->mb,
   326                                 mzone,  
A(
B->mt-1-k, 
B->mt-1-m), ldak,
   327                                         B(
B->mt-1-k, n       ), ldbk,
   328                                 lalpha, 
B(
B->mt-1-m, n       ), ldbm);
   336                                     AUV, Ark, 
B->mt-1-k, 
B->mt-1-m, ldakuv,
   337                                     BUV, Brk, 
B->mt-1-k, n, ldbkuv,  
   339                                     BUV, Brk, 
B->mt-1-m, n, ldbmuv,
   344                         RUNTIME_data_flush( sequence, 
A(
B->mt-1-k, 
B->mt-1-m) );
   346                     for (n = 0; n < 
B->nt; n++) {
   348                         RUNTIME_data_flush( sequence, 
B(
B->mt-1-k, n) );
   358         assert(
"Not implemented yet" == 0);
   359         if (
uplo == MorseUpper) {
   360             if (
trans == MorseNoTrans) {
   361                 for (k = 0; k < 
B->nt; k++) {
   362                     tempkn = k == 
B->nt-1 ? 
B->n-k*
B->nb : 
B->nb;
   364                     lalpha = k == 0 ? alpha : zone;
   365                     for (m = 0; m < 
B->mt; m++) {
   366                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   371                             tempmm, tempkn, 
A->mb,
   372                             lalpha, 
A(k, k), ldak,  
   376                     RUNTIME_data_flush( sequence, 
A(k, k) );
   377                     for (m = 0; m < 
B->mt; m++) {
   378                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   380                         for (n = k+1; n < 
B->nt; n++) {
   381                             tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   384                                 MorseNoTrans, MorseNoTrans,
   385                                 tempmm, tempnn, 
B->mb, 
A->mb,
   386                                 mzone,  
B(m, k), ldbm,  
   388                                 lalpha, 
B(m, n), ldbm); 
   391                         RUNTIME_data_flush( sequence, 
B(m, k) );
   393                     for (n = k+1; n < 
B->nt; n++) {
   395                         RUNTIME_data_flush( sequence, 
A(k, n) );
   403                 for (k = 0; k < 
B->nt; k++) {
   404                     tempkn = k == 0 ? 
B->n-(
B->nt-1)*
B->nb : 
B->nb;
   405                     ldak = BLKLDD(
A, 
B->nt-1-k);
   406                     for (m = 0; m < 
B->mt; m++) {
   407                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   412                             tempmm, tempkn, 
A->mb,
   413                             alpha, 
A(
B->nt-1-k, 
B->nt-1-k), ldak,  
   414                                    B(       m, 
B->nt-1-k), ldbm); 
   416                         RUNTIME_data_flush( sequence, 
A(
B->nt-1-k, 
B->nt-1-k) );
   418                         for (n = k+1; n < 
B->nt; n++) {
   419                             ldan = BLKLDD(
A, 
B->nt-1-n);
   423                                 tempmm, 
B->nb, tempkn, 
A->mb,
   424                                 minvalpha, 
B(m,        
B->nt-1-k), ldbm,  
   425                                            A(
B->nt-1-n, 
B->nt-1-k), ldan, 
   426                                 zone,      
B(m,        
B->nt-1-n), ldbm); 
   429                         RUNTIME_data_flush( sequence, 
B(m,        
B->nt-1-k) );
   431                     for (n = k+1; n < 
B->nt; n++) {
   433                         RUNTIME_data_flush( sequence, 
A(
B->nt-1-n, 
B->nt-1-k) );
   442             if (
trans == MorseNoTrans) {
   443                 for (k = 0; k < 
B->nt; k++) {
   444                     tempkn = k == 0 ? 
B->n-(
B->nt-1)*
B->nb : 
B->nb;
   445                     ldak = BLKLDD(
A, 
B->nt-1-k);
   446                     lalpha = k == 0 ? alpha : zone;
   447                     for (m = 0; m < 
B->mt; m++) {
   448                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   453                             tempmm, tempkn, 
A->mb,
   454                             lalpha, 
A(
B->nt-1-k, 
B->nt-1-k), ldak,  
   455                                     B(       m, 
B->nt-1-k), ldbm); 
   457                         RUNTIME_data_flush( sequence, 
A(
B->nt-1-k, 
B->nt-1-k) );
   459                         for (n = k+1; n < 
B->nt; n++) {
   462                                 MorseNoTrans, MorseNoTrans,
   463                                 tempmm, 
B->nb, tempkn, 
A->mb,
   464                                 mzone,  
B(m,        
B->nt-1-k), ldbm,  
   465                                         A(
B->nt-1-k, 
B->nt-1-n), ldak,  
   466                                 lalpha, 
B(m,        
B->nt-1-n), ldbm); 
   469                         RUNTIME_data_flush( sequence, 
B(m,        
B->nt-1-k) );
   471                     for (n = k+1; n < 
B->nt; n++) {
   473                         RUNTIME_data_flush( sequence, 
A(
B->nt-1-k, 
B->nt-1-n) );
   481                 for (k = 0; k < 
B->nt; k++) {
   482                     tempkn = k == 
B->nt-1 ? 
B->n-k*
B->nb : 
B->nb;
   484                     for (m = 0; m < 
B->mt; m++) {
   485                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   490                             tempmm, tempkn, 
A->mb,
   491                             alpha, 
A(k, k), ldak,  
   494                         RUNTIME_data_flush( sequence, 
A(k, k) );
   496                         for (n = k+1; n < 
B->nt; n++) {
   497                             tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   502                                 tempmm, tempnn, 
B->mb, 
A->mb,
   503                                 minvalpha, 
B(m, k), ldbm,  
   505                                 zone,      
B(m, n), ldbm); 
   507                         RUNTIME_data_flush( sequence, 
B(m, k) );
   509                     for (n = k+1; n < 
B->nt; n++) {
   510                         RUNTIME_data_flush( sequence, 
A(n, k) );
   517     RUNTIME_options_ws_free(&options);
   518     RUNTIME_options_finalize(&options, morse);
   526                          MORSE_desc_t *Bdense,
   528                          MORSE_sequence_t *sequence, MORSE_request_t *request)
   531         printf(
"%d:%s maxrk:%d alpha:%e\n",
   535     MORSE_desc_t* 
A = 
AUV;
   536     MORSE_desc_t* 
B = Bdense;
   538     MORSE_context_t *morse;
   539     MORSE_option_t options;
   542     int ldak, ldam, ldan, ldbk, ldbm;
   543     int tempkm, tempkn, tempmm, tempnn;
   545     double zone       = (double) 1.0;
   546     double mzone      = (double)-1.0;
   547     double minvalpha  = (double)-1.0 / alpha;
   550     morse = morse_context_self();
   551     if (sequence->status != MORSE_SUCCESS)
   553     RUNTIME_options_init(&options, morse, sequence, request);
   555     size_t ws_worker   = 0;
   559     ws_worker *= 
sizeof(double); 
   561     RUNTIME_options_ws_alloc( &options, ws_worker, ws_host );
   565     if (
side == MorseLeft) {
   566         if (
uplo == MorseUpper) {
   567             assert(
"Not implemented yet" == 0);
   568             if (
trans == MorseNoTrans) {
   569                 for (k = 0; k < 
B->mt; k++) {
   570                     tempkm = k == 0 ? 
B->m-(
B->mt-1)*
B->mb : 
B->mb;
   571                     ldak = BLKLDD(
A, 
B->mt-1-k);
   572                     ldbk = BLKLDD(
B, 
B->mt-1-k);
   573                     lalpha = k == 0 ? alpha : zone;
   574                     for (n = 0; n < 
B->nt; n++) {
   575                         tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   579                             tempkm, tempnn, 
A->mb,
   580                             lalpha, 
A(
B->mt-1-k, 
B->mt-1-k), ldak,  
   581                                     B(
B->mt-1-k,        n), ldbk); 
   583                     RUNTIME_data_flush( sequence, 
A(
B->mt-1-k, 
B->mt-1-k) );
   584                     for (m = k+1; m < 
B->mt; m++) {
   585                         ldam = BLKLDD(
A, 
B->mt-1-m);
   586                         ldbm = BLKLDD(
B, 
B->mt-1-m);
   587                         for (n = 0; n < 
B->nt; n++) {
   588                             tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   591                                 MorseNoTrans, MorseNoTrans,
   592                                 B->mb, tempnn, tempkm, 
A->mb,
   593                                 mzone,  
A(
B->mt-1-m, 
B->mt-1-k), ldam,
   594                                         B(
B->mt-1-k, n       ), ldbk,
   595                                 lalpha, 
B(
B->mt-1-m, n       ), ldbm);
   597                         RUNTIME_data_flush( sequence, 
A(
B->mt-1-m, 
B->mt-1-k) );
   599                     for (n = 0; n < 
B->nt; n++) {
   600                         RUNTIME_data_flush( sequence, 
B(
B->mt-1-k, n) );
   608                 for (k = 0; k < 
B->mt; k++) {
   609                     tempkm = k == 
B->mt-1 ? 
B->m-k*
B->mb : 
B->mb;
   612                     lalpha = k == 0 ? alpha : zone;
   613                     for (n = 0; n < 
B->nt; n++) {
   614                         tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   618                             tempkm, tempnn, 
A->mb,
   619                             lalpha, 
A(k, k), ldak,
   622                     RUNTIME_data_flush( sequence, 
A(k, k) );
   623                     for (m = k+1; m < 
B->mt; m++) {
   624                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   626                         for (n = 0; n < 
B->nt; n++) {
   627                             tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   631                                 tempmm, tempnn, 
B->mb, 
A->mb,
   632                                 mzone,  
A(k, m), ldak,
   634                                 lalpha, 
B(m, n), ldbm);
   636                         RUNTIME_data_flush( sequence, 
A(k, m) );
   638                     for (n = 0; n < 
B->nt; n++) {
   639                         RUNTIME_data_flush( sequence, 
B(k, n) );
   649             if (
trans == MorseNoTrans) {
   652                 for (k = 0; k < 
B->mt; k++) {
   653                     int ldbkd = BLKLDD(Bdense, k);
   654                     int ldakd = BLKLDD(AD, k);
   655                     tempkm = k == 
B->mt-1 ? 
B->m-k*
B->mb : 
B->mb;
   658                     lalpha = k == 0 ? alpha : zone;
   659                     for (n = 0; n < 
B->nt; n++) {
   660                         tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   667                             lalpha, AD, k, 0, ldakd,
   668                                     Bdense, k, n, ldbkd);
   670                     RUNTIME_data_flush( sequence, 
A(k, k) );
   671                     for (m = k+1; m < 
B->mt; m++) {
   672                         int ldamuv = BLKLDD(
AUV, m);
   673                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   675                         int ldbmd = BLKLDD(Bdense, m);
   676                         for (n = 0; n < 
B->nt; n++) {
   677                             tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   681                                 MorseNoTrans, MorseNoTrans,
   682                                 tempmm, tempnn, 
B->mb, 
A->mb,
   683                                 mzone,  
A(m, k), ldam,
   685                                 lalpha, 
B(m, n), ldbm);
   696                                     MorseNoTrans, MorseNoTrans,
   700                                     AUV, Ark, m, k, ldamuv,
   703                                     Bdense, m, n, ldbmd);
   706                         RUNTIME_data_flush( sequence, 
A(m, 0) );
   708                     for (n = 0; n < 
B->nt; n++) {
   709                         RUNTIME_data_flush( sequence, 
B(k, n) );
   718                 printf(
"%s %d Left Lower Trans B->m,n:%d,%d B->mt,nt:%d,%d\n", __FILE__, __LINE__, 
B->m, 
B->n, 
B->mt, 
B->nt);
   719                 for (k = 0; k < 
B->mt; k++) {
   720                     int ldakuv = BLKLDD(
AUV, 
B->mt-1-k);
   721                     int ldakd = BLKLDD(AD, 
B->mt-1-k);
   722                     int ldbkd = BLKLDD(Bdense, 
B->mt-1-k);
   723                     tempkm = k == 0 ? 
B->m-(
B->mt-1)*
B->mb : 
B->mb;
   724                     ldak = BLKLDD(AD, 
B->mt-1-k);
   725                     ldbk = BLKLDD(
B, 
B->mt-1-k);
   726                     lalpha = k == 0 ? alpha : zone;
   727                     for (n = 0; n < 
B->nt; n++) {
   728                         tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   734                         if(1)MORSE_TASK_dtrsm(
   739                             tempkm, tempnn, 
A->mb,
   740                             lalpha, AD,     
B->mt-1-k, 0, ldak,
   741                                     Bdense, 
B->mt-1-k, n, ldbk);
   743                     RUNTIME_data_flush( sequence, 
A(
B->mt-1-k, 
B->mt-1-k) );
   744                     for (m = k+1; m < 
B->mt; m++) {
   746                         if (
B->mt-1-k == 
B->mt-1) {
   747                             if (AD->m % 
AUV->mb == 0) {
   750                                 tempmm = AD->m % 
AUV->mb; 
   755                         ldbm = BLKLDD(
B, 
B->mt-1-m);
   756                         for (n = 0; n < 
B->nt; n++) {
   757                             tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   762                                 B->mb, tempnn, tempkm, 
A->mb,
   763                                 mzone,  
A(
B->mt-1-k, 
B->mt-1-m), ldak,
   764                                         B(
B->mt-1-k, n       ), ldbk,
   765                                 lalpha, 
B(
B->mt-1-m, n       ), ldbm);
   779                                     AUV, Ark, 
B->mt-1-k, 
B->mt-1-m, ldakuv,
   780                                     Bdense,   
B->mt-1-k, n,         ldbk,  
   782                                     Bdense,   
B->mt-1-m, n,         ldbm);
   785                         RUNTIME_data_flush( sequence, 
A(
B->mt-1-k, 0) );
   787                     for (n = 0; n < 
B->nt; n++) {
   788                         RUNTIME_data_flush( sequence, 
B(
B->mt-1-k, n) );
   798         assert(
"Not implemented yet" == 0);
   799         if (
uplo == MorseUpper) {
   800             if (
trans == MorseNoTrans) {
   801                 for (k = 0; k < 
B->nt; k++) {
   802                     tempkn = k == 
B->nt-1 ? 
B->n-k*
B->nb : 
B->nb;
   804                     lalpha = k == 0 ? alpha : zone;
   805                     for (m = 0; m < 
B->mt; m++) {
   806                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   811                             tempmm, tempkn, 
A->mb,
   812                             lalpha, 
A(k, k), ldak,  
   815                     RUNTIME_data_flush( sequence, 
A(k, k) );
   816                     for (m = 0; m < 
B->mt; m++) {
   817                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   819                         for (n = k+1; n < 
B->nt; n++) {
   820                             tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   823                                 MorseNoTrans, MorseNoTrans,
   824                                 tempmm, tempnn, 
B->mb, 
A->mb,
   825                                 mzone,  
B(m, k), ldbm,  
   827                                 lalpha, 
B(m, n), ldbm); 
   829                         RUNTIME_data_flush( sequence, 
B(m, k) );
   831                     for (n = k+1; n < 
B->nt; n++) {
   832                         RUNTIME_data_flush( sequence, 
A(k, n) );
   840                 for (k = 0; k < 
B->nt; k++) {
   841                     tempkn = k == 0 ? 
B->n-(
B->nt-1)*
B->nb : 
B->nb;
   842                     ldak = BLKLDD(
A, 
B->nt-1-k);
   843                     for (m = 0; m < 
B->mt; m++) {
   844                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   849                             tempmm, tempkn, 
A->mb,
   850                             alpha, 
A(
B->nt-1-k, 
B->nt-1-k), ldak,  
   851                                    B(       m, 
B->nt-1-k), ldbm); 
   852                         RUNTIME_data_flush( sequence, 
A(
B->nt-1-k, 
B->nt-1-k) );
   854                         for (n = k+1; n < 
B->nt; n++) {
   855                             ldan = BLKLDD(
A, 
B->nt-1-n);
   859                                 tempmm, 
B->nb, tempkn, 
A->mb,
   860                                 minvalpha, 
B(m,        
B->nt-1-k), ldbm,  
   861                                            A(
B->nt-1-n, 
B->nt-1-k), ldan, 
   862                                 zone,      
B(m,        
B->nt-1-n), ldbm); 
   864                         RUNTIME_data_flush( sequence, 
B(m,        
B->nt-1-k) );
   866                     for (n = k+1; n < 
B->nt; n++) {
   867                         RUNTIME_data_flush( sequence, 
A(
B->nt-1-n, 
B->nt-1-k) );
   876             if (
trans == MorseNoTrans) {
   877                 for (k = 0; k < 
B->nt; k++) {
   878                     tempkn = k == 0 ? 
B->n-(
B->nt-1)*
B->nb : 
B->nb;
   879                     ldak = BLKLDD(
A, 
B->nt-1-k);
   880                     lalpha = k == 0 ? alpha : zone;
   881                     for (m = 0; m < 
B->mt; m++) {
   882                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   887                             tempmm, tempkn, 
A->mb,
   888                             lalpha, 
A(
B->nt-1-k, 
B->nt-1-k), ldak,  
   889                                     B(       m, 
B->nt-1-k), ldbm); 
   890                         RUNTIME_data_flush( sequence, 
A(
B->nt-1-k, 
B->nt-1-k) );
   892                         for (n = k+1; n < 
B->nt; n++) {
   895                                 MorseNoTrans, MorseNoTrans,
   896                                 tempmm, 
B->nb, tempkn, 
A->mb,
   897                                 mzone,  
B(m,        
B->nt-1-k), ldbm,  
   898                                         A(
B->nt-1-k, 
B->nt-1-n), ldak,  
   899                                 lalpha, 
B(m,        
B->nt-1-n), ldbm); 
   901                         RUNTIME_data_flush( sequence, 
B(m,        
B->nt-1-k) );
   903                     for (n = k+1; n < 
B->nt; n++) {
   904                         RUNTIME_data_flush( sequence, 
A(
B->nt-1-k, 
B->nt-1-n) );
   912                 for (k = 0; k < 
B->nt; k++) {
   913                     tempkn = k == 
B->nt-1 ? 
B->n-k*
B->nb : 
B->nb;
   915                     for (m = 0; m < 
B->mt; m++) {
   916                         tempmm = m == 
B->mt-1 ? 
B->m-m*
B->mb : 
B->mb;
   921                             tempmm, tempkn, 
A->mb,
   922                             alpha, 
A(k, k), ldak,  
   924                         RUNTIME_data_flush( sequence, 
A(k, k) );
   926                         for (n = k+1; n < 
B->nt; n++) {
   927                             tempnn = n == 
B->nt-1 ? 
B->n-n*
B->nb : 
B->nb;
   932                                 tempmm, tempnn, 
B->mb, 
A->mb,
   933                                 minvalpha, 
B(m, k), ldbm,  
   935                                 zone,      
B(m, n), ldbm); 
   937                         RUNTIME_data_flush( sequence, 
B(m, k) );
   939                     for (n = k+1; n < 
B->nt; n++) {
   940                         RUNTIME_data_flush( sequence, 
A(n, k) );
   947     RUNTIME_options_ws_free(&options);
   948     RUNTIME_options_finalize(&options, morse);
 
void hicma_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum diag, double alpha, MORSE_desc_t *AUV, MORSE_desc_t *AD, MORSE_desc_t *Ark, MORSE_desc_t *BUV, MORSE_desc_t *Brk, int rk, int maxrk, double acc, MORSE_sequence_t *sequence, MORSE_request_t *request)
void HICMA_TASK_zgemm_bdcd(const MORSE_option_t *options, MORSE_enum transA, int transB, int m, int n, double alpha, const MORSE_desc_t *AUV, const MORSE_desc_t *Ark, int Am, int An, int lda, const MORSE_desc_t *BD, int Bm, int Bn, int ldb, double beta, const MORSE_desc_t *CD, int Cm, int Cn, int ldc)
void HICMA_TASK_zgemm(const MORSE_option_t *options, MORSE_enum transA, int transB, int m, int n, double alpha, const MORSE_desc_t *AUV, const MORSE_desc_t *Ark, int Am, int An, int lda, const MORSE_desc_t *BUV, const MORSE_desc_t *Brk, int Bm, int Bn, int ldb, double beta, const MORSE_desc_t *CUV, const MORSE_desc_t *Crk, int Cm, int Cn, int ldc, int rk, int maxrk, double acc)
void hicma_pztrsmd(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum diag, double alpha, MORSE_desc_t *AUV, MORSE_desc_t *AD, MORSE_desc_t *Ark, MORSE_desc_t *Bdense, int maxrk, MORSE_sequence_t *sequence, MORSE_request_t *request)
int HICMA_get_print_index()
void HICMA_TASK_ztrsm(const MORSE_option_t *options, MORSE_enum side, MORSE_enum uplo, MORSE_enum transA, MORSE_enum diag, int m, double alpha, const MORSE_desc_t *A, int Am, int An, int lda, const MORSE_desc_t *BUV, int Bm, int Bn, int ldb, const MORSE_desc_t *Brk)