pzpotrimm.c 16.5 KB
Newer Older
1
/**
2 3
 *
 * @file pzpotrimm.c
4
 *
Mathieu Faverge's avatar
Mathieu Faverge committed
5 6
 * @copyright 2009-2014 The University of Tennessee and The University of
 *                      Tennessee Research Foundation. All rights reserved.
Mathieu Faverge's avatar
Mathieu Faverge committed
7
 * @copyright 2012-2018 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
8
 *                      Univ. Bordeaux. All rights reserved.
9
 *
Mathieu Faverge's avatar
Mathieu Faverge committed
10
 ***
11
 *
Mathieu Faverge's avatar
Mathieu Faverge committed
12
 * @brief Chameleon zpotrimm parallel algorithm
13
 *
Mathieu Faverge's avatar
Mathieu Faverge committed
14
 * @version 1.0.0
15
 * @comment This file has been automatically generated
Mathieu Faverge's avatar
Mathieu Faverge committed
16
 *          from Plasma 2.5.0 for CHAMELEON 1.0.0
17 18
 * @author Hatem Ltaief
 * @author Mathieu Faverge
19
 * @author Ali M Charara
20 21 22
 * @date 2010-11-15
 * @precisions normal z -> s d c
 *
23
 */
24
#include "control/common.h"
25 26 27 28

#define A(m,n) A,  m,  n
#define B(m,n) B,  m,  n
#define C(m,n) C,  m,  n
29
/**
30
 *  Parallel tile Cholesky factorization - dynamic scheduling
31
 */
Mathieu Faverge's avatar
Mathieu Faverge committed
32
void chameleon_pzpotrimm(cham_uplo_t uplo, CHAM_desc_t *A, CHAM_desc_t *B, CHAM_desc_t *C,
Mathieu Faverge's avatar
Mathieu Faverge committed
33
                     RUNTIME_sequence_t *sequence, RUNTIME_request_t *request)
34
{
Mathieu Faverge's avatar
Mathieu Faverge committed
35
    CHAM_context_t *chamctxt;
Mathieu Faverge's avatar
Mathieu Faverge committed
36
    RUNTIME_option_t options;
37 38

    int k, m, n;
39
    int ldbm, ldcm;
40 41 42
    int ldak, ldam, ldan;
    int tempkm, tempmm, tempnn, tempkn;

Mathieu Faverge's avatar
Mathieu Faverge committed
43 44 45 46 47
    CHAMELEON_Complex64_t alpha = (CHAMELEON_Complex64_t) 1.0;
    CHAMELEON_Complex64_t beta  = (CHAMELEON_Complex64_t) 0.0;
    CHAMELEON_Complex64_t zbeta;
    CHAMELEON_Complex64_t zone  = (CHAMELEON_Complex64_t) 1.0;
    CHAMELEON_Complex64_t mzone = (CHAMELEON_Complex64_t)-1.0;
48 49


Mathieu Faverge's avatar
Mathieu Faverge committed
50
    chamctxt = chameleon_context_self();
Mathieu Faverge's avatar
Mathieu Faverge committed
51
    if (sequence->status != CHAMELEON_SUCCESS)
52
        return;
Mathieu Faverge's avatar
Mathieu Faverge committed
53
    RUNTIME_options_init(&options, chamctxt, sequence, request);
54 55

    /*
Mathieu Faverge's avatar
Mathieu Faverge committed
56
     *  ChamLower
57
     */
Mathieu Faverge's avatar
Mathieu Faverge committed
58
    if (uplo == ChamLower) {
59 60 61
        /*
         *  ZPOTRF
         */
62
        for (k = 0; k < A->mt; k++) {
Mathieu Faverge's avatar
Mathieu Faverge committed
63
            RUNTIME_iteration_push(chamctxt, k);
64

65 66
            tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
            ldak = BLKLDD(A, k);
67

Mathieu Faverge's avatar
Mathieu Faverge committed
68
            INSERT_TASK_zpotrf(
69
                &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
70
                ChamLower, tempkm, A->mb,
71
                A(k, k), ldak, A->nb*k);
72

73 74 75
            for (m = k+1; m < A->mt; m++) {
                tempmm = m == A->mt-1 ? A->m-m*A->mb : A->mb;
                ldam = BLKLDD(A, m);
Mathieu Faverge's avatar
Mathieu Faverge committed
76
                INSERT_TASK_ztrsm(
77
                    &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
78
                    ChamRight, ChamLower, ChamConjTrans, ChamNonUnit,
79 80 81 82
                    tempmm, A->mb, A->mb,
                    zone, A(k, k), ldak,
                          A(m, k), ldam);
            }
83
            RUNTIME_data_flush( sequence, A(k, k) );
84

85 86 87
            for (n = k+1; n < A->nt; n++) {
                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
                ldan = BLKLDD(A, n);
Mathieu Faverge's avatar
Mathieu Faverge committed
88
                INSERT_TASK_zherk(
89
                    &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
90
                    ChamLower, ChamNoTrans,
91 92 93 94 95 96 97
                    tempnn, A->nb, A->mb,
                    -1.0, A(n, k), ldan,
                     1.0, A(n, n), ldan);

                for (m = n+1; m < A->mt; m++) {
                    tempmm = m == A->mt-1 ? A->m - m*A->mb : A->mb;
                    ldam = BLKLDD(A, m);
Mathieu Faverge's avatar
Mathieu Faverge committed
98
                    INSERT_TASK_zgemm(
99
                        &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
100
                        ChamNoTrans, ChamConjTrans,
101 102 103 104 105
                        tempmm, tempnn, A->mb, A->mb,
                        mzone, A(m, k), ldam,
                               A(n, k), ldan,
                        zone,  A(m, n), ldam);
                }
106
                RUNTIME_data_flush( sequence, A(n, k) );
107
            }
108

Mathieu Faverge's avatar
Mathieu Faverge committed
109
            RUNTIME_iteration_pop(chamctxt);
110
        }
111 112 113
        /*
         *  ZTRTRI
         */
114
        for (k = 0; k < A->nt; k++) {
Mathieu Faverge's avatar
Mathieu Faverge committed
115
            RUNTIME_iteration_push(chamctxt, A->nt + k);
116

117 118 119
            tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
            ldak = BLKLDD(A, k);
            for (m = k+1; m < A->mt; m++) {
120 121
                tempmm = m == A->mt-1 ? A->m-m*A->mb : A->mb;
                ldam = BLKLDD(A, m);
Mathieu Faverge's avatar
Mathieu Faverge committed
122
                INSERT_TASK_ztrsm(
123
                    &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
124
                    ChamRight, uplo, ChamNoTrans, ChamNonUnit,
125 126 127
                    tempmm, tempkn, A->mb,
                    mzone, A(k, k), ldak,
                           A(m, k), ldam);
128
            }
129
            for (m = k+1; m < A->mt; m++) {
130 131
                tempmm = m == A->mt-1 ? A->m-m*A->mb : A->mb;
                ldam = BLKLDD(A, m);
132
                for (n = 0; n < k; n++) {
Mathieu Faverge's avatar
Mathieu Faverge committed
133
                    INSERT_TASK_zgemm(
134
                        &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
135
                        ChamNoTrans, ChamNoTrans,
136 137 138 139
                        tempmm, A->nb, tempkn, A->mb,
                        zone, A(m, k), ldam,
                              A(k, n), ldak,
                        zone, A(m, n), ldam);
140
                }
141
                RUNTIME_data_flush( sequence, A(m, k) );
142
            }
143
            for (n = 0; n < k; n++) {
144
                RUNTIME_data_flush( sequence, A(k, n) );
Mathieu Faverge's avatar
Mathieu Faverge committed
145
                INSERT_TASK_ztrsm(
146
                    &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
147
                    ChamLeft, uplo, ChamNoTrans, ChamNonUnit,
148 149 150
                    tempkn, A->nb, A->mb,
                    zone, A(k, k), ldak,
                          A(k, n), ldak);
151
            }
152
            RUNTIME_data_flush( sequence, A(k, k) );
Mathieu Faverge's avatar
Mathieu Faverge committed
153
            INSERT_TASK_ztrtri(
154
                &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
155
                uplo, ChamNonUnit,
156 157
                tempkn, A->mb,
                A(k, k), ldak, A->nb*k);
158

Mathieu Faverge's avatar
Mathieu Faverge committed
159
            RUNTIME_iteration_pop(chamctxt);
160 161 162 163
        }
        /*
         *  ZLAUUM
         */
164
        for (k = 0; k < A->mt; k++) {
Mathieu Faverge's avatar
Mathieu Faverge committed
165
            RUNTIME_iteration_push(chamctxt, 2*A->nt + k);
166

167 168 169 170
            tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
            ldak = BLKLDD(A, k);
            for(n = 0; n < k; n++) {
                ldan = BLKLDD(A, n);
Mathieu Faverge's avatar
Mathieu Faverge committed
171
                INSERT_TASK_zherk(
172
                    &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
173
                    uplo, ChamConjTrans,
174 175 176
                    A->mb, tempkm, A->mb,
                    1.0, A(k, n), ldak,
                    1.0, A(n, n), ldan);
177

178 179
                for(m = n+1; m < k; m++) {
                    ldam = BLKLDD(A, m);
Mathieu Faverge's avatar
Mathieu Faverge committed
180
                    INSERT_TASK_zgemm(
181
                        &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
182
                        ChamConjTrans, ChamNoTrans,
183 184 185 186
                        A->mb, A->nb, tempkm, A->mb,
                        1.0, A(k, m), ldak,
                             A(k, n), ldak,
                        1.0, A(m, n), ldam);
187 188
                }
            }
189
            for (n = 0; n < k; n++) {
190
                RUNTIME_data_flush( sequence, A(k, n) );
Mathieu Faverge's avatar
Mathieu Faverge committed
191
                INSERT_TASK_ztrmm(
192
                    &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
193
                    ChamLeft, uplo, ChamConjTrans, ChamNonUnit,
194 195 196
                    tempkm, A->nb, A->mb,
                    1.0, A(k, k), ldak,
                         A(k, n), ldak);
197
            }
198
            RUNTIME_data_flush( sequence, A(k, k) );
Mathieu Faverge's avatar
Mathieu Faverge committed
199
            INSERT_TASK_zlauum(
200
                &options,
201 202
                uplo, tempkm, A->mb,
                A(k, k), ldak);
203

Mathieu Faverge's avatar
Mathieu Faverge committed
204
            RUNTIME_iteration_pop(chamctxt);
205 206
        }
        /*
207
         *  ZSYMM Right / Lower
208
         */
209
        for (k = 0; k < C->nt; k++) {
Mathieu Faverge's avatar
Mathieu Faverge committed
210
            RUNTIME_iteration_push(chamctxt, 3*A->nt + k);
211

212 213 214 215 216 217 218 219 220 221 222 223 224
            tempkn = k == C->nt-1 ? C->n-k*C->nb : C->nb;
            ldak = BLKLDD(A, k);
            zbeta = k == 0 ? beta : zone;

            for (m = 0; m < C->mt; m++) {
                tempmm = m == C->mt-1 ? C->m-m*C->mb : C->mb;
                ldbm = BLKLDD(B, m);
                ldcm = BLKLDD(C, m);

                for (n = 0; n < C->nt; n++) {
                    tempnn = n == C->nt-1 ? C->n-n*C->nb : C->nb;
                    ldan = BLKLDD(A, n);

225
                    if (k < n) {
Mathieu Faverge's avatar
Mathieu Faverge committed
226
                       INSERT_TASK_zgemm(
227
                           &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
228
                           ChamNoTrans, ChamTrans,
229
                           tempmm, tempnn, tempkn, A->mb,
230 231 232
                           alpha, B(m, k), ldbm,  /* ldbm * K */
                                  A(n, k), ldan,  /* ldan * K */
                           zbeta, C(m, n), ldcm); /* ldcm * Y */
233 234 235
                    }
                    else {
                        if (k == n) {
Mathieu Faverge's avatar
Mathieu Faverge committed
236
                           INSERT_TASK_zsymm(
237
                               &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
238
                               ChamRight, uplo,
239
                               tempmm, tempnn, A->mb,
240 241 242
                               alpha, A(k, k), ldak,  /* ldak * Y */
                                      B(m, k), ldbm,  /* ldbm * Y */
                               zbeta, C(m, n), ldcm); /* ldcm * Y */
243 244
                        }
                        else {
Mathieu Faverge's avatar
Mathieu Faverge committed
245
                            INSERT_TASK_zgemm(
246
                                &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
247
                                ChamNoTrans, ChamNoTrans,
248
                                tempmm, tempnn, tempkn, A->mb,
249 250 251
                                alpha, B(m, k), ldbm,  /* ldbm * K */
                                       A(k, n), ldak,  /* ldak * Y */
                                zbeta, C(m, n), ldcm); /* ldcm * Y */
252 253 254
                        }
                    }
                }
255
                RUNTIME_data_flush( sequence, B(m, k) );
256 257
            }
            for (n = 0; n <= k; n++) {
258
                RUNTIME_data_flush( sequence, A(k, n) );
259
            }
260

Mathieu Faverge's avatar
Mathieu Faverge committed
261
            RUNTIME_iteration_pop(chamctxt);
262 263 264
        }
    }
    /*
Mathieu Faverge's avatar
Mathieu Faverge committed
265
     *  ChamUpper
266 267 268 269 270 271
     */
    else {
        /*
         *  ZPOTRF
         */
        for (k = 0; k < A->nt; k++) {
Mathieu Faverge's avatar
Mathieu Faverge committed
272
            RUNTIME_iteration_push(chamctxt, k);
273

274 275
            tempkm = k == A->nt-1 ? A->n-k*A->nb : A->nb;
            ldak = BLKLDD(A, k);
Mathieu Faverge's avatar
Mathieu Faverge committed
276
            INSERT_TASK_zpotrf(
277
                &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
278
                ChamUpper,
279 280 281 282 283
                tempkm, A->mb,
                A(k, k), ldak, A->nb*k);

            for (n = k+1; n < A->nt; n++) {
                tempnn = n == A->nt-1 ? A->n - n*A->nb : A->nb;
Mathieu Faverge's avatar
Mathieu Faverge committed
284
                INSERT_TASK_ztrsm(
285
                    &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
286
                    ChamLeft, ChamUpper, ChamConjTrans, ChamNonUnit,
287 288
                    A->mb, tempnn, A->mb,
                    zone, A(k, k), ldak,
289
                          A(k, n), ldak);
290
            }
291
            RUNTIME_data_flush( sequence, A(k, k) );
292

293 294 295
            for (m = k+1; m < A->mt; m++) {
                tempmm = m == A->mt-1 ? A->m - m*A->mb : A->mb;
                ldam = BLKLDD(A, m);
296

Mathieu Faverge's avatar
Mathieu Faverge committed
297
                INSERT_TASK_zherk(
298
                    &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
299
                    ChamUpper, ChamConjTrans,
300 301
                    tempmm, A->mb, A->mb,
                    -1.0, A(k, m), ldak,
302 303 304 305
                     1.0, A(m, m), ldam);

                for (n = m+1; n < A->nt; n++) {
                    tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
306

Mathieu Faverge's avatar
Mathieu Faverge committed
307
                    INSERT_TASK_zgemm(
308
                        &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
309
                        ChamConjTrans, ChamNoTrans,
310 311
                        tempmm, tempnn, A->mb, A->mb,
                        mzone, A(k, m), ldak,
312
                               A(k, n), ldak,
313
                        zone,  A(m, n), ldam);
314
                }
315
                RUNTIME_data_flush( sequence, A(k, m) );
316
            }
317

Mathieu Faverge's avatar
Mathieu Faverge committed
318
            RUNTIME_iteration_pop(chamctxt);
319
        }
320 321 322
        /*
         *  ZTRTRI
         */
323
        for (k = 0; k < A->mt; k++) {
Mathieu Faverge's avatar
Mathieu Faverge committed
324
            RUNTIME_iteration_push(chamctxt, A->nt + k);
325

326 327 328
            tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
            ldak = BLKLDD(A, k);
            for (n = k+1; n < A->nt; n++) {
329
                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
Mathieu Faverge's avatar
Mathieu Faverge committed
330
                INSERT_TASK_ztrsm(
331
                    &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
332
                    ChamLeft, uplo, ChamNoTrans, ChamNonUnit,
333 334 335
                    tempkm, tempnn, A->mb,
                    mzone, A(k, k), ldak,
                           A(k, n), ldak);
336
            }
337
            for (n = k+1; n < A->nt; n++) {
338
                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
339 340
                for (m = 0; m < k; m++) {
                    ldam = BLKLDD(A, m);
Mathieu Faverge's avatar
Mathieu Faverge committed
341
                    INSERT_TASK_zgemm(
342
                        &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
343
                        ChamNoTrans, ChamNoTrans,
344 345 346 347
                        A->mb, tempnn, tempkm, A->mb,
                        zone, A(m, k), ldam,
                              A(k, n), ldak,
                        zone, A(m, n), ldam);
348
                }
349
                RUNTIME_data_flush( sequence, A(k, n) );
350 351 352
            }
            for (m = 0; m < k; m++) {
                ldam = BLKLDD(A, m);
353
                RUNTIME_data_flush( sequence, A(m, k) );
Mathieu Faverge's avatar
Mathieu Faverge committed
354
                INSERT_TASK_ztrsm(
355
                    &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
356
                    ChamRight, uplo, ChamNoTrans, ChamNonUnit,
357 358 359
                    A->mb, tempkm, A->mb,
                    zone, A(k, k), ldak,
                          A(m, k), ldam);
360
            }
361
            RUNTIME_data_flush( sequence, A(k, k) );
Mathieu Faverge's avatar
Mathieu Faverge committed
362
            INSERT_TASK_ztrtri(
363
                &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
364
                uplo, ChamNonUnit,
365 366
                tempkm, A->mb,
                A(k, k), ldak, A->mb*k);
367

Mathieu Faverge's avatar
Mathieu Faverge committed
368
            RUNTIME_iteration_pop(chamctxt);
369 370 371 372
        }
        /*
         *  ZLAUUM
         */
373
        for (k = 0; k < A->mt; k++) {
Mathieu Faverge's avatar
Mathieu Faverge committed
374
            RUNTIME_iteration_push(chamctxt, 2*A->nt + k);
375

376 377 378 379 380
            tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
            ldak = BLKLDD(A, k);

            for (m = 0; m < k; m++) {
                ldam = BLKLDD(A, m);
Mathieu Faverge's avatar
Mathieu Faverge committed
381
                INSERT_TASK_zherk(
382
                    &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
383
                    uplo, ChamNoTrans,
384 385 386
                    A->mb, tempkn, A->mb,
                    1.0, A(m, k), ldam,
                    1.0, A(m, m), ldam);
387

388 389
                for (n = m+1; n < k; n++){
                    ldan = BLKLDD(A, n);
Mathieu Faverge's avatar
Mathieu Faverge committed
390
                    INSERT_TASK_zgemm(
391
                        &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
392
                        ChamNoTrans, ChamConjTrans,
393 394 395 396
                        A->mb, A->nb, tempkn, A->mb,
                        1.0, A(m, k), ldam,
                             A(n, k), ldan,
                        1.0, A(m, n), ldam);
397 398
                }
            }
399 400
            for (m = 0; m < k; m++) {
                ldam = BLKLDD(A, m);
401
                RUNTIME_data_flush( sequence, A(m, k) );
Mathieu Faverge's avatar
Mathieu Faverge committed
402
                INSERT_TASK_ztrmm(
403
                    &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
404
                    ChamRight, uplo, ChamConjTrans, ChamNonUnit,
405 406 407
                    A->mb, tempkn, A->mb,
                    1.0, A(k, k), ldak,
                         A(m, k), ldam);
408
            }
409
            RUNTIME_data_flush( sequence, A(k, k) );
Mathieu Faverge's avatar
Mathieu Faverge committed
410
            INSERT_TASK_zlauum(
411
                &options,
412 413
                uplo, tempkn, A->mb,
                A(k, k), ldak);
414

Mathieu Faverge's avatar
Mathieu Faverge committed
415
            RUNTIME_iteration_pop(chamctxt);
416 417
        }
        /*
418
         *  ZSYMM Right / Upper
419
         */
420
        for (k = 0; k < C->nt; k++) {
Mathieu Faverge's avatar
Mathieu Faverge committed
421
            RUNTIME_iteration_push(chamctxt, 3*A->nt + k);
422

423 424 425 426 427 428 429 430 431 432 433 434 435
            tempkn = k == C->nt-1 ? C->n-k*C->nb : C->nb;
            ldak = BLKLDD(A, k);
            zbeta = k == 0 ? beta : zone;

            for (m = 0; m < C->mt; m++) {
                tempmm = m == C->mt-1 ? C->m-m*C->mb : C->mb;
                ldbm = BLKLDD(B, m);
                ldcm = BLKLDD(C, m);

                for (n = 0; n < C->nt; n++) {
                    tempnn = n == C->nt-1 ? C->n-n*C->nb : C->nb;
                    ldan = BLKLDD(A, n);

436
                    if (k < n) {
Mathieu Faverge's avatar
Mathieu Faverge committed
437
                        INSERT_TASK_zgemm(
438
                            &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
439
                            ChamNoTrans, ChamNoTrans,
440
                            tempmm, tempnn, tempkn, A->mb,
441 442 443
                            alpha, B(m, k), ldbm,  /* ldbm * K */
                                   A(k, n), ldak,  /* ldak * Y */
                            zbeta, C(m, n), ldcm); /* ldcm * Y */
444 445 446
                    }
                    else {
                        if (k == n) {
Mathieu Faverge's avatar
Mathieu Faverge committed
447
                            INSERT_TASK_zsymm(
448
                                &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
449
                                ChamRight, uplo,
450
                                tempmm, tempnn, A->mb,
451 452 453
                                alpha, A(k, k), ldak,  /* ldak * Y */
                                       B(m, k), ldbm,  /* ldbm * Y */
                                zbeta, C(m, n), ldcm); /* ldcm * Y */
454 455
                        }
                        else {
Mathieu Faverge's avatar
Mathieu Faverge committed
456
                            INSERT_TASK_zgemm(
457
                                &options,
Mathieu Faverge's avatar
Mathieu Faverge committed
458
                                ChamNoTrans, ChamTrans,
459
                                tempmm, tempnn, tempkn, A->mb,
460 461 462
                                alpha, B(m, k), ldbm,  /* ldbm * K */
                                       A(n, k), ldan,  /* ldan * K */
                                zbeta, C(m, n), ldcm); /* ldcm * Y */
463 464 465
                        }
                    }
                }
466
                RUNTIME_data_flush( sequence, B(m, k) );
467 468
            }
            for (m = 0; m <= k; m++) {
469
                RUNTIME_data_flush( sequence, A(m, k) );
470
            }
471

Mathieu Faverge's avatar
Mathieu Faverge committed
472
            RUNTIME_iteration_pop(chamctxt);
473 474 475
        }
    }

Mathieu Faverge's avatar
Mathieu Faverge committed
476
    RUNTIME_options_finalize(&options, chamctxt);
477
}