OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
dmumps_lr_stats Module Reference

Functions/Subroutines

subroutine collect_blocksizes (cut, npartsass, npartscb)
subroutine upd_flop_decompress (f, cb)
subroutine upd_flop_compress (lr_b, rec_acc, cb_compress, frswap)
subroutine upd_flop_trsm (lrb, loru)
subroutine upd_flop_update (lrb1, lrb2, midblk_compress, rank_in, buildq, is_symdiag, lua_activated, rec_acc)
subroutine upd_flop_update_lrlr3 (lrb, niv)
subroutine upd_flop_root (keep50, nfront, npiv, nprow, npcol, myid)
subroutine init_stats_global (id)
subroutine upd_mry_lu_fr (nass, ncb, sym, nelim)
subroutine upd_mry_cb_fr (nrows, ncols, sym)
subroutine upd_mry_cb_lrgain (lrb)
subroutine upd_mry_lu_lrgain (blr_panel, nbblocks)
subroutine upd_flop_facto_fr (nfront, nass, npiv, sym, niv)
subroutine stats_compute_flop_slave_type2 (nrow1, ncol1, nass1, keep50, inode)
subroutine upd_flop_frfronts (nfront, npiv, nass, sym, niv)
subroutine upd_flop_frfront_slave (nrow1, ncol1, nass1, keep50, inode)
subroutine compute_global_gains (nb_entries_factor, flop_number, nb_entries_factor_withlr, prokg, mpg)
subroutine saveandwrite_gains (local, k489, dkeep, n, icntl36, depth, bcksz, nassmin, nfrontmin, sym, k486, k472, k475, k478, k480, k481, k483, k484, k8110, k849, nbtreenodes, nprocs, mpg, prokg)

Variables

double precision mry_cb_fr
double precision mry_cb_lrgain
double precision mry_lu_fr
double precision mry_lu_lrgain
double precision global_mry_lpro_compr
double precision global_mry_ltot_compr
integer cnt_nodes
double precision flop_lrgain
double precision flop_facto_fr
double precision flop_facto_lr
double precision flop_panel
double precision flop_trsm
double precision flop_trsm_fr
double precision flop_trsm_lr
double precision flop_update_fr
double precision flop_update_lr
double precision flop_update_lrlr1
double precision flop_update_lrlr2
double precision flop_update_lrlr3
double precision flop_update_frlr
double precision flop_update_frfr
double precision flop_compress
double precision flop_cb_compress
double precision flop_midblk_compress
double precision flop_frswap_compress
double precision flop_accum_compress
double precision flop_decompress
double precision flop_cb_decompress
double precision flop_frfronts
double precision factor_processed_fraction
integer(kind=8) factor_size
double precision total_flop
double precision time_update
double precision time_update_lrlr1
double precision time_update_lrlr2
double precision time_update_lrlr3
double precision time_update_frlr
double precision time_update_frfr
double precision time_compress
double precision time_midblk_compress
double precision time_frswap_compress
double precision time_cb_compress
double precision time_lr_module
double precision time_upd_nelim
double precision time_lrtrsm
double precision time_frtrsm
double precision time_panel
double precision time_fac_i
double precision time_fac_mq
double precision time_fac_sq
double precision time_frfronts
double precision time_diagcopy
double precision time_decomp
double precision time_decomp_ucfs
double precision time_decomp_asm1
double precision time_decomp_locasm2
double precision time_decomp_maplig1
double precision time_decomp_asms2s
double precision time_decomp_asms2m
double precision time_lrana_lrgrouping
double precision time_lrana_sepgrouping
double precision time_lrana_gethalo
double precision time_lrana_kway
double precision time_lrana_gnew
double precision avg_flop_facto_lr
double precision min_flop_facto_lr
double precision max_flop_facto_lr
integer total_nblocks_ass
integer total_nblocks_cb
integer min_blocksize_ass
integer max_blocksize_ass
integer min_blocksize_cb
integer max_blocksize_cb
double precision avg_blocksize_ass
double precision avg_blocksize_cb

Function/Subroutine Documentation

◆ collect_blocksizes()

subroutine dmumps_lr_stats::collect_blocksizes ( integer, dimension(:), pointer cut,
integer, intent(in) npartsass,
integer, intent(in) npartscb )

Definition at line 89 of file dlr_stats.F.

90 INTEGER, INTENT(IN) :: NPARTSASS, NPARTSCB
91 INTEGER, POINTER, DIMENSION(:) :: CUT
92 INTEGER :: LOC_MIN_ASS, LOC_MIN_CB, LOC_MAX_ASS, LOC_MAX_CB,
93 & LOC_TOT_ASS, LOC_TOT_CB
94 DOUBLE PRECISION :: LOC_AVG_ASS, LOC_AVG_CB
95 INTEGER :: I
96 loc_tot_ass = 0
97 loc_tot_cb = 0
98 loc_avg_ass = 0.d0
99 loc_avg_cb = 0.d0
100 loc_min_ass = 100000
101 loc_min_cb = 100000
102 loc_max_ass = 0
103 loc_max_cb = 0
104 DO i = 1,npartsass
105 loc_avg_ass = ( loc_tot_ass * loc_avg_ass
106 & + cut(i+1) - cut(i) )
107 & / (loc_tot_ass + 1)
108 loc_tot_ass = loc_tot_ass + 1
109 IF (cut(i+1) - cut(i) .LE. loc_min_ass) THEN
110 loc_min_ass = cut(i+1) - cut(i)
111 END IF
112 IF (cut(i+1) - cut(i) .GE. loc_max_ass) THEN
113 loc_max_ass = cut(i+1) - cut(i)
114 END IF
115 END DO
116 DO i = npartsass+1,npartsass+npartscb
117 loc_avg_cb = ( loc_tot_cb * loc_avg_cb
118 & + cut(i+1) - cut(i) )
119 & / (loc_tot_cb + 1)
120 loc_tot_cb = loc_tot_cb + 1
121 IF (cut(i+1) - cut(i) .LE. loc_min_cb) THEN
122 loc_min_cb = cut(i+1) - cut(i)
123 END IF
124 IF (cut(i+1) - cut(i) .GE. loc_max_cb) THEN
125 loc_max_cb = cut(i+1) - cut(i)
126 END IF
127 END DO
128 avg_blocksize_ass = (total_nblocks_ass*avg_blocksize_ass
129 & + loc_tot_ass*loc_avg_ass) / (total_nblocks_ass+loc_tot_ass)
130 avg_blocksize_cb = (total_nblocks_cb*avg_blocksize_cb
131 & + loc_tot_cb*loc_avg_cb) / (total_nblocks_cb+loc_tot_cb)
132 total_nblocks_ass = total_nblocks_ass + loc_tot_ass
133 total_nblocks_cb = total_nblocks_cb + loc_tot_cb
134 min_blocksize_ass = min(min_blocksize_ass,loc_min_ass)
135 min_blocksize_cb = min(min_blocksize_cb,loc_min_cb)
136 max_blocksize_ass = max(max_blocksize_ass,loc_max_ass)
137 max_blocksize_cb = max(max_blocksize_cb,loc_max_cb)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21

◆ compute_global_gains()

subroutine dmumps_lr_stats::compute_global_gains ( integer(8), intent(in) nb_entries_factor,
double precision, intent(in) flop_number,
integer(8), intent(out) nb_entries_factor_withlr,
logical, intent(in) prokg,
integer, intent(in) mpg )

Definition at line 532 of file dlr_stats.F.

535 INTEGER(8), INTENT(IN) :: NB_ENTRIES_FACTOR
536 INTEGER, INTENT(IN) :: MPG
537 LOGICAL, INTENT(IN) :: PROKG
538 DOUBLE PRECISION, INTENT(IN) :: FLOP_NUMBER
539 INTEGER(8), INTENT(OUT) ::
540 & NB_ENTRIES_FACTOR_withLR
541 IF (nb_entries_factor < 0) THEN
542 IF (prokg.AND.mpg.GT.0) THEN
543 WRITE(mpg,*) "NEGATIVE NUMBER OF ENTRIES IN FACTOR"
544 WRITE(mpg,*) "===> OVERFLOW ?"
545 END IF
546 END IF
547 IF (mry_lu_fr .EQ. 0) THEN
548 global_mry_lpro_compr = 100.0d0
549 ELSE
550 global_mry_lpro_compr = 100.0d0 *
551 & mry_lu_lrgain/mry_lu_fr
552 ENDIF
553 IF (mry_cb_fr .EQ. 0) THEN
554 mry_cb_fr = 100.0d0
555 END IF
556 nb_entries_factor_withlr = nb_entries_factor -
557 & int(mry_lu_lrgain,8)
558 IF (nb_entries_factor.EQ.0) THEN
559 factor_processed_fraction = 100.0d0
560 global_mry_ltot_compr = 100.0d0
561 ELSE
562 factor_processed_fraction = 100.0d0 *
563 & mry_lu_fr/dble(nb_entries_factor)
564 global_mry_ltot_compr =
565 & 100.0d0*mry_lu_lrgain/dble(nb_entries_factor)
566 ENDIF
567 total_flop = flop_number
568 flop_facto_lr = flop_facto_fr - flop_lrgain + flop_compress
569 & + flop_decompress
570 RETURN

◆ init_stats_global()

subroutine dmumps_lr_stats::init_stats_global ( type (dmumps_struc), target id)

Definition at line 343 of file dlr_stats.F.

345 TYPE (DMUMPS_STRUC), TARGET :: id
346 mry_lu_fr = 0.d0
347 mry_lu_lrgain = 0.d0
348 mry_cb_fr = 0.d0
349 mry_cb_lrgain = 0.d0
350 flop_facto_fr = 0.d0
351 flop_facto_lr = 0.d0
352 flop_lrgain = 0.d0
353 flop_cb_compress = 0.d0
354 flop_cb_decompress = 0.d0
355 flop_decompress = 0.d0
356 flop_update_fr = 0.d0
357 flop_update_lr = 0.d0
358 flop_update_lrlr1 = 0.d0
359 flop_update_lrlr2 = 0.d0
360 flop_update_lrlr3 = 0.d0
361 flop_update_frlr = 0.d0
362 flop_update_frfr = 0.d0
363 flop_midblk_compress = 0.d0
364 flop_trsm_fr = 0.d0
365 flop_trsm_lr = 0.d0
366 flop_compress = 0.d0
367 flop_accum_compress = 0.d0
368 flop_frswap_compress = 0.d0
369 flop_panel = 0.d0
370 flop_trsm = 0.d0
371 flop_frfronts = 0.d0
372 total_nblocks_ass = 0
373 total_nblocks_cb = 0
374 avg_blocksize_ass = 0.d0
375 avg_blocksize_cb = 0.d0
376 min_blocksize_ass = huge(1)
377 max_blocksize_ass = 0
378 min_blocksize_cb = huge(1)
379 max_blocksize_cb = 0
380 cnt_nodes = 0
381 time_update = 0.d0
382 time_midblk_compress = 0.d0
383 time_update_lrlr1 = 0.d0
384 time_update_lrlr2 = 0.d0
385 time_update_lrlr3 = 0.d0
386 time_update_frlr = 0.d0
387 time_update_frfr = 0.d0
388 time_compress = 0.d0
389 time_cb_compress = 0.d0
390 time_lr_module = 0.d0
391 time_upd_nelim = 0.d0
392 time_lrtrsm = 0.d0
393 time_frtrsm = 0.d0
394 time_panel = 0.d0
395 time_fac_i = 0.d0
396 time_fac_mq = 0.d0
397 time_fac_sq = 0.d0
398 time_frfronts = 0.d0
399 time_diagcopy = 0.d0
400 time_frswap_compress = 0.d0
401 time_decomp = 0.d0
402 time_decomp_ucfs = 0.d0
403 time_decomp_asm1 = 0.d0
404 time_decomp_locasm2 = 0.d0
405 time_decomp_maplig1 = 0.d0
406 time_decomp_asms2s = 0.d0
407 time_decomp_asms2m = 0.d0

◆ saveandwrite_gains()

subroutine dmumps_lr_stats::saveandwrite_gains ( integer, intent(in) local,
integer, intent(in) k489,
double precision, dimension(230) dkeep,
integer, intent(in) n,
integer, intent(in) icntl36,
integer, intent(in) depth,
integer, intent(in) bcksz,
integer, intent(in) nassmin,
integer, intent(in) nfrontmin,
integer, intent(in) sym,
integer, intent(in) k486,
integer, intent(in) k472,
integer, intent(in) k475,
integer, intent(in) k478,
integer, intent(in) k480,
integer, intent(in) k481,
integer, intent(in) k483,
integer, intent(in) k484,
integer(8), intent(in) k8110,
integer(8), intent(in) k849,
integer, intent(in) nbtreenodes,
integer, intent(in) nprocs,
integer, intent(in) mpg,
logical, intent(in) prokg )

Definition at line 572 of file dlr_stats.F.

578 INTEGER, INTENT(IN) :: LOCAL,K489,DEPTH, N,
579 & ICNTL36, BCKSZ,NASSMIN,
580 & NFRONTMIN, K486, NBTREENODES, MPG,
581 & K472, K475, K478, K480, K481, K483, K484,
582 & SYM, NPROCS
583 INTEGER(8), INTENT(IN) :: K8110, K849
584 LOGICAL, INTENT(IN) :: PROKG
585 DOUBLE PRECISION :: DKEEP(230)
586 LOGICAL PROK
587 prok = (prokg.AND.(mpg.GE.0))
588 IF (prok) THEN
589 WRITE(mpg,'(/A,A)')
590 & '-------------- Beginning of BLR statistics -------------------',
591 & '--------------'
592 WRITE(mpg,'(A,I2)')
593 & ' ICNTL(36) BLR variant = ', icntl36
594 WRITE(mpg,'(A,ES8.1)')
595 & ' CNTL(7) Dropping parameter controlling accuracy = ',
596 & dkeep(8)
597 WRITE(mpg,'(A)')
598 & ' Statistics after BLR factorization :'
599 WRITE(mpg,'(A,I8)')
600 & ' Number of BLR fronts = ',
601 & cnt_nodes
602 ENDIF
603 IF (prok) WRITE(mpg,'(A,F8.1,A)')
604 & ' Fraction of factors in BLR fronts =',
605 & factor_processed_fraction,'% '
606 IF (prok) THEN
607 WRITE(mpg,'(A)')
608 & ' Statistics on the number of entries in factors :'
609 WRITE(mpg,'(A,ES10.3,A,F5.1,A)')
610 & ' INFOG(29) Theoretical nb of entries in factors ='
611 & ,dble(k8110),' (100.0%)'
612 WRITE(mpg,'(A,ES10.3,A,F5.1,A)')
613 & ' INFOG(35) Effective nb of entries (% of INFOG(29)) ='
614 & ,dble(k849),' ('
615 & ,dble(100)*(dble(k849)/dble(max(k8110,1_8)))
616 & ,'%)'
617 ENDIF
618 IF (prok) WRITE(mpg,'(A)')
619 & ' Statistics on operation counts (OPC):'
620 total_flop = max(total_flop,epsilon(1.0d0))
621 dkeep(55)=dble(total_flop)
622 dkeep(60)=dble(100)
623 dkeep(56)=dble(flop_facto_lr+flop_frfronts)
624 dkeep(61)=dble(100*(flop_facto_lr+flop_frfronts)/total_flop)
625 IF (prok) THEN
626 WRITE(mpg,'(A,ES10.3,A,F5.1,A)')
627 & ' RINFOG(3) Total theoretical operations counts ='
628 & ,total_flop,' (',100*total_flop/total_flop,'%)'
629 WRITE(mpg,'(A,ES10.3,A,F5.1,A)')
630 & ' RINFOG(14) Total effective OPC (% of RINFOG(3)) ='
631 & ,flop_facto_lr+flop_frfronts,' ('
632 &,100*(flop_facto_lr+flop_frfronts)/total_flop
633 &,'%)'
634 ENDIF
635 IF (prok) WRITE(mpg,'(A,A)')
636 & '-------------- End of BLR statistics -------------------------',
637 & '--------------'
638 RETURN

◆ stats_compute_flop_slave_type2()

subroutine dmumps_lr_stats::stats_compute_flop_slave_type2 ( integer, intent(in) nrow1,
integer, intent(in) ncol1,
integer, intent(in) nass1,
integer, intent(in) keep50,
integer, intent(in) inode )

Definition at line 477 of file dlr_stats.F.

479 INTEGER,INTENT(IN) :: NROW1, NCOL1, KEEP50, NASS1, INODE
480 DOUBLE PRECISION :: NROW2, NCOL2, NASS2
481 DOUBLE PRECISION :: FLOP
482 nrow2 = dble(nrow1)
483 ncol2 = dble(ncol1)
484 nass2 = dble(nass1)
485 IF (keep50.EQ.0) THEN
486 flop = nrow2*nass2*nass2
487 & + 2.0d0*nrow2*nass2*(ncol2-nass2)
488 ELSE
489 flop =
490 & nrow2*nass2*nass2
491 & + nrow2*nass2*nrow2
492 & + 2.0d0*nrow2*nass2*(ncol2-nass2-nrow2)
493 ENDIF
494!$OMP ATOMIC UPDATE
495 flop_facto_fr = flop_facto_fr + flop
496!$OMP END ATOMIC
497 RETURN

◆ upd_flop_compress()

subroutine dmumps_lr_stats::upd_flop_compress ( type(lrb_type), intent(in) lr_b,
logical, optional rec_acc,
logical, optional cb_compress,
logical, optional frswap )

Definition at line 152 of file dlr_stats.F.

154 TYPE(LRB_TYPE),INTENT(IN) :: LR_B
155 INTEGER(8) :: M,N,K
156 DOUBLE PRECISION :: HR_COST,BUILDQ_COST,
157 & HR_AND_BUILDQ_COST
158 LOGICAL, OPTIONAL :: REC_ACC, CB_COMPRESS, FRSWAP
159 m = int(lr_b%M,8)
160 n = int(lr_b%N,8)
161 k = int(lr_b%K,8)
162 hr_cost = dble(k*k*k/3_8 + 4_8*k*m*n - (2_8*m+n)*k*k)
163 IF (lr_b%ISLR) THEN
164 buildq_cost = dble(2_8*k*k*m - k*k*k)
165 ELSE
166 buildq_cost = 0.0d0
167 END IF
168 hr_and_buildq_cost = hr_cost + buildq_cost
169!$OMP ATOMIC UPDATE
170 flop_compress = flop_compress + hr_and_buildq_cost
171!$OMP END ATOMIC
172 IF (present(rec_acc)) THEN
173 IF (rec_acc) THEN
174!$OMP ATOMIC UPDATE
175 flop_accum_compress = flop_accum_compress +
176 & hr_and_buildq_cost
177!$OMP END ATOMIC
178 ENDIF
179 ENDIF
180 IF (present(cb_compress)) THEN
181 IF (cb_compress) THEN
182!$OMP ATOMIC UPDATE
183 flop_cb_compress = flop_cb_compress +
184 & hr_and_buildq_cost
185!$OMP END ATOMIC
186 ENDIF
187 ENDIF
188 IF (present(frswap)) THEN
189 IF (frswap) THEN
190!$OMP ATOMIC UPDATE
191 flop_frswap_compress = flop_frswap_compress +
192 & hr_and_buildq_cost
193!$OMP END ATOMIC
194 ENDIF
195 ENDIF
196 RETURN

◆ upd_flop_decompress()

subroutine dmumps_lr_stats::upd_flop_decompress ( double precision, intent(in) f,
logical, intent(in) cb )

Definition at line 139 of file dlr_stats.F.

140 DOUBLE PRECISION, INTENT(IN) :: F
141 LOGICAL, INTENT(IN) :: CB
142!$OMP ATOMIC UPDATE
143 flop_decompress = flop_decompress + f
144!$OMP END ATOMIC
145 IF (cb) THEN
146!$OMP ATOMIC UPDATE
147 flop_cb_decompress = flop_cb_decompress + f
148!$OMP END ATOMIC
149 ENDIF
150 RETURN

◆ upd_flop_facto_fr()

subroutine dmumps_lr_stats::upd_flop_facto_fr ( integer, intent(in) nfront,
integer, intent(in) nass,
integer, intent(in) npiv,
integer, intent(in) sym,
integer, intent(in) niv )

Definition at line 468 of file dlr_stats.F.

469 INTEGER,INTENT(IN) :: NFRONT, SYM, NASS, NPIV, NIV
470 DOUBLE PRECISION :: FLOP
471 CALL mumps_get_flops_cost(nfront, npiv, nass,
472 & sym, niv, flop)
473!$OMP ATOMIC UPDATE
474 flop_facto_fr = flop_facto_fr + flop
475!$OMP END ATOMIC
subroutine mumps_get_flops_cost(nfront, npiv, nass, keep50, level, cost)
Definition estim_flops.F:74

◆ upd_flop_frfront_slave()

subroutine dmumps_lr_stats::upd_flop_frfront_slave ( integer, intent(in) nrow1,
integer, intent(in) ncol1,
integer, intent(in) nass1,
integer, intent(in) keep50,
integer, intent(in) inode )

Definition at line 510 of file dlr_stats.F.

512 INTEGER,INTENT(IN) :: NROW1, NCOL1, KEEP50, NASS1, INODE
513 DOUBLE PRECISION :: NROW2, NCOL2, NASS2
514 DOUBLE PRECISION :: FLOP
515 nrow2 = dble(nrow1)
516 ncol2 = dble(ncol1)
517 nass2 = dble(nass1)
518 IF (keep50.EQ.0) THEN
519 flop = nrow2*nass2*nass2
520 & + 2.0d0*nrow2*nass2*(ncol2-nass2)
521 ELSE
522 flop =
523 & nrow2*nass2*nass2
524 & + nrow2*nass2*nrow2
525 & + 2.0d0*nrow2*nass2*(ncol2-nass2-nrow2)
526 ENDIF
527!$OMP ATOMIC UPDATE
528 flop_frfronts = flop_frfronts + flop
529!$OMP END ATOMIC
530 RETURN

◆ upd_flop_frfronts()

subroutine dmumps_lr_stats::upd_flop_frfronts ( integer, intent(in) nfront,
integer, intent(in) npiv,
integer, intent(in) nass,
integer, intent(in) sym,
integer, intent(in) niv )

Definition at line 499 of file dlr_stats.F.

501 INTEGER, INTENT(IN) :: NFRONT, NPIV, NASS, SYM, NIV
502 DOUBLE PRECISION :: FLOP_FAC
503 CALL mumps_get_flops_cost(nfront, npiv, nass,
504 & sym, niv, flop_fac)
505!$OMP ATOMIC UPDATE
506 flop_frfronts = flop_frfronts + flop_fac
507!$OMP END ATOMIC
508 RETURN

◆ upd_flop_root()

subroutine dmumps_lr_stats::upd_flop_root ( integer, intent(in) keep50,
integer, intent(in) nfront,
integer, intent(in) npiv,
integer, intent(in) nprow,
integer, intent(in) npcol,
integer, intent(in) myid )

Definition at line 329 of file dlr_stats.F.

331 INTEGER, intent(in) :: KEEP50, NFRONT, NPIV,
332 & NPROW, NPCOL, MYID
333 DOUBLE PRECISION :: COST, COST_PER_PROC
334 INTEGER, PARAMETER :: LEVEL3 = 3
335 CALL mumps_get_flops_cost(nfront, npiv, nfront, keep50, level3,
336 & cost)
337 cost_per_proc = dble(int( cost,8) / int(nprow * npcol,8))
338!$OMP ATOMIC UPDATE
339 flop_frfronts = flop_frfronts + cost_per_proc
340!$OMP END ATOMIC
341 RETURN

◆ upd_flop_trsm()

subroutine dmumps_lr_stats::upd_flop_trsm ( type(lrb_type), intent(in) lrb,
integer, intent(in) loru )

Definition at line 198 of file dlr_stats.F.

199 TYPE(LRB_TYPE),INTENT(IN) :: LRB
200 INTEGER,INTENT(IN) :: LorU
201 DOUBLE PRECISION :: LR_COST, FR_COST, LR_GAIN
202 IF (loru.EQ.0) THEN
203 fr_cost = dble(lrb%M*lrb%N*lrb%N)
204 IF (lrb%ISLR) THEN
205 lr_cost = dble(lrb%K*lrb%N*lrb%N)
206 ELSE
207 lr_cost = fr_cost
208 ENDIF
209 ELSE
210 fr_cost = dble(lrb%M-1)*dble(lrb%N*lrb%N)
211 IF (lrb%ISLR) THEN
212 lr_cost = dble(lrb%N-1)*dble(lrb%N*lrb%K)
213 ELSE
214 lr_cost = fr_cost
215 ENDIF
216 ENDIF
217 lr_gain = fr_cost - lr_cost
218!$OMP ATOMIC UPDATE
219 flop_lrgain = flop_lrgain + lr_gain
220!$OMP END ATOMIC
221 RETURN

◆ upd_flop_update()

subroutine dmumps_lr_stats::upd_flop_update ( type(lrb_type), intent(in) lrb1,
type(lrb_type), intent(in) lrb2,
integer, intent(in) midblk_compress,
integer, intent(in) rank_in,
logical, intent(in) buildq,
logical, intent(in) is_symdiag,
logical, intent(in) lua_activated,
logical, intent(in), optional rec_acc )

Definition at line 223 of file dlr_stats.F.

226 TYPE(LRB_TYPE),INTENT(IN) :: LRB1,LRB2
227 LOGICAL, INTENT(IN) :: BUILDQ, IS_SYMDIAG, LUA_ACTIVATED
228 INTEGER, INTENT(IN) :: RANK_IN, MIDBLK_COMPRESS
229 LOGICAL, INTENT(IN), OPTIONAL :: REC_ACC
230 DOUBLE PRECISION :: COST_FR, COST_LR, COST_LRLR1, COST_LRLR2,
231 & COST_LRLR3, COST_FRLR, COST_FRFR,
232 & COST_COMPRESS, COST_LR_AND_COMPRESS, LR_GAIN
233 DOUBLE PRECISION :: M1,N1,K1,M2,N2,K2,RANK
234 LOGICAL :: REC_ACC_LOC
235 m1 = dble(lrb1%M)
236 n1 = dble(lrb1%N)
237 k1 = dble(lrb1%K)
238 m2 = dble(lrb2%M)
239 n2 = dble(lrb2%N)
240 k2 = dble(lrb2%K)
241 rank = dble(rank_in)
242 cost_lrlr1 = 0.0d0
243 cost_lrlr2 = 0.0d0
244 cost_lrlr3 = 0.0d0
245 cost_frlr = 0.0d0
246 cost_frfr = 0.0d0
247 cost_compress = 0.0d0
248 IF (present(rec_acc)) THEN
249 rec_acc_loc = rec_acc
250 ELSE
251 rec_acc_loc = .false.
252 ENDIF
253 IF ((.NOT.lrb1%ISLR).AND.(.NOT.lrb2%ISLR)) THEN
254 cost_frfr = 2.0d0*m1*m2*n1
255 cost_lr = 2.0d0*m1*m2*n1
256 cost_fr = 2.0d0*m1*m2*n1
257 ELSEIF (lrb1%ISLR.AND.(.NOT.lrb2%ISLR)) THEN
258 cost_frlr = 2.0d0*k1*m2*n1
259 cost_lrlr3 = 2.0d0*m1*m2*k1
260 cost_lr = cost_frlr + cost_lrlr3
261 cost_fr = 2.0d0*m1*m2*n1
262 ELSEIF ((.NOT.lrb1%ISLR).AND.lrb2%ISLR) THEN
263 cost_frlr = 2.0d0*m1*k2*n1
264 cost_lrlr3 = 2.0d0*m1*m2*k2
265 cost_lr = cost_frlr + cost_lrlr3
266 cost_fr = 2.0d0*m1*m2*n1
267 ELSE
268 IF (midblk_compress.GE.1) THEN
269 cost_compress = rank*rank*rank/3.0d0 +
270 & 4.0d0*rank*k1*k2 -
271 & (2.0d0*k1+k2)*rank*rank
272 IF (buildq) THEN
273 cost_compress = cost_compress + 4.0d0*rank*rank*k1
274 & - rank*rank*rank
275 ENDIF
276 ENDIF
277 cost_lrlr1 = 2.0d0*k1*k2*n1
278 IF ((midblk_compress.GE.1).AND.buildq) THEN
279 cost_lrlr2 = 2.0d0*k1*m1*rank + 2.0d0*k2*m2*rank
280 cost_lrlr3 = 2.0d0*m1*m2*rank
281 ELSE
282 IF (k1 .GE. k2) THEN
283 cost_lrlr2 = 2.0d0*k1*m1*k2
284 cost_lrlr3 = 2.0d0*m1*m2*k2
285 ELSE
286 cost_lrlr2 = 2.0d0*k1*m2*k2
287 cost_lrlr3 = 2.0d0*m1*m2*k1
288 ENDIF
289 ENDIF
290 cost_lr = cost_lrlr1 + cost_lrlr2 + cost_lrlr3
291 cost_fr = 2.0d0*m1*m2*n1
292 ENDIF
293 IF (is_symdiag) THEN
294 cost_fr = cost_fr/2.0d0
295 cost_lrlr3 = cost_lrlr3/2.0d0
296 cost_frfr = cost_frfr/2.0d0
297 cost_lr = cost_lr - cost_lrlr3 - cost_frfr
298 ENDIF
299 IF (lua_activated) THEN
300 cost_lr = cost_lr - cost_lrlr3
301 cost_lrlr3 = 0.0d0
302 IF (rec_acc_loc) THEN
303 cost_lr_and_compress = cost_lr + cost_compress
304!$OMP ATOMIC UPDATE
305 flop_compress = flop_compress + cost_lr_and_compress
306!$OMP END ATOMIC
307 ENDIF
308 ENDIF
309 IF (.NOT.rec_acc_loc) THEN
310!$OMP ATOMIC UPDATE
311 flop_compress = flop_compress + cost_compress
312!$OMP END ATOMIC
313 lr_gain = cost_fr - cost_lr
314!$OMP ATOMIC UPDATE
315 flop_lrgain = flop_lrgain + lr_gain
316!$OMP END ATOMIC
317 ENDIF

◆ upd_flop_update_lrlr3()

subroutine dmumps_lr_stats::upd_flop_update_lrlr3 ( type(lrb_type), intent(in) lrb,
integer, intent(in) niv )

Definition at line 319 of file dlr_stats.F.

320 TYPE(LRB_TYPE),INTENT(IN) :: LRB
321 INTEGER,INTENT(IN) :: NIV
322 DOUBLE PRECISION :: FLOP_COST
323 flop_cost = 2.0d0*dble(lrb%M)*dble(lrb%N)*dble(lrb%K)
324!$OMP ATOMIC UPDATE
325 flop_lrgain = flop_lrgain - flop_cost
326!$OMP END ATOMIC
327 RETURN

◆ upd_mry_cb_fr()

subroutine dmumps_lr_stats::upd_mry_cb_fr ( integer, intent(in) nrows,
integer, intent(in) ncols,
integer, intent(in) sym )

Definition at line 426 of file dlr_stats.F.

427 INTEGER,INTENT(IN) :: NROWS, NCOLS, SYM
428 DOUBLE PRECISION :: MRY
429 IF (sym.EQ.0) THEN
430 mry = dble(ncols)*dble(nrows)
431 ELSE
432 mry = dble(ncols-nrows)*dble(nrows) +
433 & dble(nrows)*dble(nrows+1)/2.d0
434 ENDIF
435!$OMP ATOMIC UPDATE
436 mry_cb_fr = mry_cb_fr + mry
437!$OMP END ATOMIC
438 RETURN

◆ upd_mry_cb_lrgain()

subroutine dmumps_lr_stats::upd_mry_cb_lrgain ( type(lrb_type), intent(in) lrb)

Definition at line 440 of file dlr_stats.F.

442 TYPE(LRB_TYPE), INTENT(IN) :: LRB
443 DOUBLE PRECISION :: LRGAIND
444 lrgaind = dble(lrb%M*lrb%N-(lrb%M+lrb%N)*lrb%K)
445!$OMP ATOMIC UPDATE
446 mry_cb_lrgain = mry_cb_lrgain + lrgaind
447!$OMP END ATOMIC
448 RETURN

◆ upd_mry_lu_fr()

subroutine dmumps_lr_stats::upd_mry_lu_fr ( integer, intent(in) nass,
integer, intent(in) ncb,
integer, intent(in) sym,
integer, intent(in) nelim )

Definition at line 409 of file dlr_stats.F.

410 INTEGER,INTENT(IN) :: NASS, NCB, SYM, NELIM
411 DOUBLE PRECISION :: MRY
412 INTEGER :: NPIV
413 npiv = nass - nelim
414 IF (sym .GT. 0) THEN
415 mry = dble(npiv)*(dble(npiv)+1.d0)/2.d0
416 & + dble(npiv)*dble(ncb+nelim)
417 ELSE
418 mry = dble(npiv)*dble(npiv)
419 & + 2.0d0*dble(npiv)*dble(ncb+nelim)
420 END IF
421!$OMP ATOMIC UPDATE
422 mry_lu_fr = mry_lu_fr + mry
423!$OMP END ATOMIC
424 RETURN

◆ upd_mry_lu_lrgain()

subroutine dmumps_lr_stats::upd_mry_lu_lrgain ( type(lrb_type), dimension(:), intent(in) blr_panel,
integer, intent(in) nbblocks )

Definition at line 450 of file dlr_stats.F.

452 INTEGER,INTENT(IN) :: NBBLOCKS
453 TYPE(LRB_TYPE), INTENT(IN) :: BLR_PANEL(:)
454 DOUBLE PRECISION :: MRY
455 INTEGER :: I
456 mry = 0.0d0
457 DO i = 1, nbblocks
458 IF (blr_panel(i)%ISLR) THEN
459 mry = mry + dble(blr_panel(i)%M*blr_panel(i)%N
460 & - blr_panel(i)%K*(blr_panel(i)%M + blr_panel(i)%N))
461 ENDIF
462 ENDDO
463!$OMP ATOMIC UPDATE
464 mry_lu_lrgain = mry_lu_lrgain + mry
465!$OMP END ATOMIC
466 RETURN

Variable Documentation

◆ avg_blocksize_ass

double precision dmumps_lr_stats::avg_blocksize_ass

Definition at line 87 of file dlr_stats.F.

87 DOUBLE PRECISION :: AVG_BLOCKSIZE_ASS, AVG_BLOCKSIZE_CB

◆ avg_blocksize_cb

double precision dmumps_lr_stats::avg_blocksize_cb

Definition at line 87 of file dlr_stats.F.

◆ avg_flop_facto_lr

double precision dmumps_lr_stats::avg_flop_facto_lr

Definition at line 81 of file dlr_stats.F.

81 DOUBLE PRECISION :: AVG_FLOP_FACTO_LR

◆ cnt_nodes

integer dmumps_lr_stats::cnt_nodes

Definition at line 23 of file dlr_stats.F.

23 INTEGER :: CNT_NODES

◆ factor_processed_fraction

double precision dmumps_lr_stats::factor_processed_fraction

Definition at line 46 of file dlr_stats.F.

46 DOUBLE PRECISION :: FACTOR_PROCESSED_FRACTION

◆ factor_size

integer(kind=8) dmumps_lr_stats::factor_size

Definition at line 47 of file dlr_stats.F.

47 INTEGER(KIND=8) :: FACTOR_SIZE

◆ flop_accum_compress

double precision dmumps_lr_stats::flop_accum_compress

Definition at line 38 of file dlr_stats.F.

◆ flop_cb_compress

double precision dmumps_lr_stats::flop_cb_compress

Definition at line 38 of file dlr_stats.F.

◆ flop_cb_decompress

double precision dmumps_lr_stats::flop_cb_decompress

Definition at line 38 of file dlr_stats.F.

◆ flop_compress

double precision dmumps_lr_stats::flop_compress

Definition at line 38 of file dlr_stats.F.

38 DOUBLE PRECISION :: FLOP_COMPRESS,
39 & FLOP_CB_COMPRESS,
40 & FLOP_MIDBLK_COMPRESS,
41 & FLOP_FRSWAP_COMPRESS,
42 & FLOP_ACCUM_COMPRESS,
43 & FLOP_DECOMPRESS,
44 & FLOP_CB_DECOMPRESS,
45 & FLOP_FRFRONTS

◆ flop_decompress

double precision dmumps_lr_stats::flop_decompress

Definition at line 38 of file dlr_stats.F.

◆ flop_facto_fr

double precision dmumps_lr_stats::flop_facto_fr

Definition at line 24 of file dlr_stats.F.

◆ flop_facto_lr

double precision dmumps_lr_stats::flop_facto_lr

Definition at line 24 of file dlr_stats.F.

◆ flop_frfronts

double precision dmumps_lr_stats::flop_frfronts

Definition at line 38 of file dlr_stats.F.

◆ flop_frswap_compress

double precision dmumps_lr_stats::flop_frswap_compress

Definition at line 38 of file dlr_stats.F.

◆ flop_lrgain

double precision dmumps_lr_stats::flop_lrgain

Definition at line 24 of file dlr_stats.F.

24 DOUBLE PRECISION :: FLOP_LRGAIN,
25 & FLOP_FACTO_FR,
26 & FLOP_FACTO_LR,
27 & FLOP_PANEL,
28 & FLOP_TRSM,
29 & FLOP_TRSM_FR,
30 & FLOP_TRSM_LR,
31 & FLOP_UPDATE_FR,
32 & FLOP_UPDATE_LR,
33 & FLOP_UPDATE_LRLR1,
34 & FLOP_UPDATE_LRLR2,
35 & FLOP_UPDATE_LRLR3,
36 & FLOP_UPDATE_FRLR,
37 & FLOP_UPDATE_FRFR

◆ flop_midblk_compress

double precision dmumps_lr_stats::flop_midblk_compress

Definition at line 38 of file dlr_stats.F.

◆ flop_panel

double precision dmumps_lr_stats::flop_panel

Definition at line 24 of file dlr_stats.F.

◆ flop_trsm

double precision dmumps_lr_stats::flop_trsm

Definition at line 24 of file dlr_stats.F.

◆ flop_trsm_fr

double precision dmumps_lr_stats::flop_trsm_fr

Definition at line 24 of file dlr_stats.F.

◆ flop_trsm_lr

double precision dmumps_lr_stats::flop_trsm_lr

Definition at line 24 of file dlr_stats.F.

◆ flop_update_fr

double precision dmumps_lr_stats::flop_update_fr

Definition at line 24 of file dlr_stats.F.

◆ flop_update_frfr

double precision dmumps_lr_stats::flop_update_frfr

Definition at line 24 of file dlr_stats.F.

◆ flop_update_frlr

double precision dmumps_lr_stats::flop_update_frlr

Definition at line 24 of file dlr_stats.F.

◆ flop_update_lr

double precision dmumps_lr_stats::flop_update_lr

Definition at line 24 of file dlr_stats.F.

◆ flop_update_lrlr1

double precision dmumps_lr_stats::flop_update_lrlr1

Definition at line 24 of file dlr_stats.F.

◆ flop_update_lrlr2

double precision dmumps_lr_stats::flop_update_lrlr2

Definition at line 24 of file dlr_stats.F.

◆ flop_update_lrlr3

double precision dmumps_lr_stats::flop_update_lrlr3

Definition at line 24 of file dlr_stats.F.

◆ global_mry_lpro_compr

double precision dmumps_lr_stats::global_mry_lpro_compr

Definition at line 17 of file dlr_stats.F.

◆ global_mry_ltot_compr

double precision dmumps_lr_stats::global_mry_ltot_compr

Definition at line 17 of file dlr_stats.F.

◆ max_blocksize_ass

integer dmumps_lr_stats::max_blocksize_ass

Definition at line 85 of file dlr_stats.F.

◆ max_blocksize_cb

integer dmumps_lr_stats::max_blocksize_cb

Definition at line 86 of file dlr_stats.F.

◆ max_flop_facto_lr

double precision dmumps_lr_stats::max_flop_facto_lr

Definition at line 83 of file dlr_stats.F.

83 DOUBLE PRECISION :: MAX_FLOP_FACTO_LR

◆ min_blocksize_ass

integer dmumps_lr_stats::min_blocksize_ass

Definition at line 85 of file dlr_stats.F.

85 INTEGER :: MIN_BLOCKSIZE_ASS, MAX_BLOCKSIZE_ASS

◆ min_blocksize_cb

integer dmumps_lr_stats::min_blocksize_cb

Definition at line 86 of file dlr_stats.F.

86 INTEGER :: MIN_BLOCKSIZE_CB, MAX_BLOCKSIZE_CB

◆ min_flop_facto_lr

double precision dmumps_lr_stats::min_flop_facto_lr

Definition at line 82 of file dlr_stats.F.

82 DOUBLE PRECISION :: MIN_FLOP_FACTO_LR

◆ mry_cb_fr

double precision dmumps_lr_stats::mry_cb_fr

Definition at line 17 of file dlr_stats.F.

17 DOUBLE PRECISION :: MRY_CB_FR,
18 & MRY_CB_LRGAIN,
19 & MRY_LU_FR,
20 & MRY_LU_LRGAIN,
21 & GLOBAL_MRY_LPRO_COMPR,
22 & GLOBAL_MRY_LTOT_COMPR

◆ mry_cb_lrgain

double precision dmumps_lr_stats::mry_cb_lrgain

Definition at line 17 of file dlr_stats.F.

◆ mry_lu_fr

double precision dmumps_lr_stats::mry_lu_fr

Definition at line 17 of file dlr_stats.F.

◆ mry_lu_lrgain

double precision dmumps_lr_stats::mry_lu_lrgain

Definition at line 17 of file dlr_stats.F.

◆ time_cb_compress

double precision dmumps_lr_stats::time_cb_compress

Definition at line 58 of file dlr_stats.F.

58 DOUBLE PRECISION :: TIME_CB_COMPRESS

◆ time_compress

double precision dmumps_lr_stats::time_compress

Definition at line 55 of file dlr_stats.F.

55 DOUBLE PRECISION :: TIME_COMPRESS

◆ time_decomp

double precision dmumps_lr_stats::time_decomp

Definition at line 69 of file dlr_stats.F.

69 DOUBLE PRECISION :: TIME_DECOMP

◆ time_decomp_asm1

double precision dmumps_lr_stats::time_decomp_asm1

Definition at line 71 of file dlr_stats.F.

71 DOUBLE PRECISION :: TIME_DECOMP_ASM1

◆ time_decomp_asms2m

double precision dmumps_lr_stats::time_decomp_asms2m

Definition at line 75 of file dlr_stats.F.

75 DOUBLE PRECISION :: TIME_DECOMP_ASMS2M

◆ time_decomp_asms2s

double precision dmumps_lr_stats::time_decomp_asms2s

Definition at line 74 of file dlr_stats.F.

74 DOUBLE PRECISION :: TIME_DECOMP_ASMS2S

◆ time_decomp_locasm2

double precision dmumps_lr_stats::time_decomp_locasm2

Definition at line 72 of file dlr_stats.F.

72 DOUBLE PRECISION :: TIME_DECOMP_LOCASM2

◆ time_decomp_maplig1

double precision dmumps_lr_stats::time_decomp_maplig1

Definition at line 73 of file dlr_stats.F.

73 DOUBLE PRECISION :: TIME_DECOMP_MAPLIG1

◆ time_decomp_ucfs

double precision dmumps_lr_stats::time_decomp_ucfs

Definition at line 70 of file dlr_stats.F.

70 DOUBLE PRECISION :: TIME_DECOMP_UCFS

◆ time_diagcopy

double precision dmumps_lr_stats::time_diagcopy

Definition at line 68 of file dlr_stats.F.

68 DOUBLE PRECISION :: TIME_DIAGCOPY

◆ time_fac_i

double precision dmumps_lr_stats::time_fac_i

Definition at line 64 of file dlr_stats.F.

64 DOUBLE PRECISION :: TIME_FAC_I

◆ time_fac_mq

double precision dmumps_lr_stats::time_fac_mq

Definition at line 65 of file dlr_stats.F.

65 DOUBLE PRECISION :: TIME_FAC_MQ

◆ time_fac_sq

double precision dmumps_lr_stats::time_fac_sq

Definition at line 66 of file dlr_stats.F.

66 DOUBLE PRECISION :: TIME_FAC_SQ

◆ time_frfronts

double precision dmumps_lr_stats::time_frfronts

Definition at line 67 of file dlr_stats.F.

67 DOUBLE PRECISION :: TIME_FRFRONTS

◆ time_frswap_compress

double precision dmumps_lr_stats::time_frswap_compress

Definition at line 57 of file dlr_stats.F.

57 DOUBLE PRECISION :: TIME_FRSWAP_COMPRESS

◆ time_frtrsm

double precision dmumps_lr_stats::time_frtrsm

Definition at line 62 of file dlr_stats.F.

62 DOUBLE PRECISION :: TIME_FRTRSM

◆ time_lr_module

double precision dmumps_lr_stats::time_lr_module

Definition at line 59 of file dlr_stats.F.

59 DOUBLE PRECISION :: TIME_LR_MODULE

◆ time_lrana_gethalo

double precision dmumps_lr_stats::time_lrana_gethalo

Definition at line 78 of file dlr_stats.F.

78 DOUBLE PRECISION :: TIME_LRANA_GETHALO

◆ time_lrana_gnew

double precision dmumps_lr_stats::time_lrana_gnew

Definition at line 80 of file dlr_stats.F.

80 DOUBLE PRECISION :: TIME_LRANA_GNEW

◆ time_lrana_kway

double precision dmumps_lr_stats::time_lrana_kway

Definition at line 79 of file dlr_stats.F.

79 DOUBLE PRECISION :: TIME_LRANA_KWAY

◆ time_lrana_lrgrouping

double precision dmumps_lr_stats::time_lrana_lrgrouping

Definition at line 76 of file dlr_stats.F.

76 DOUBLE PRECISION :: TIME_LRANA_LRGROUPING

◆ time_lrana_sepgrouping

double precision dmumps_lr_stats::time_lrana_sepgrouping

Definition at line 77 of file dlr_stats.F.

77 DOUBLE PRECISION :: TIME_LRANA_SEPGROUPING

◆ time_lrtrsm

double precision dmumps_lr_stats::time_lrtrsm

Definition at line 61 of file dlr_stats.F.

61 DOUBLE PRECISION :: TIME_LRTRSM

◆ time_midblk_compress

double precision dmumps_lr_stats::time_midblk_compress

Definition at line 56 of file dlr_stats.F.

56 DOUBLE PRECISION :: TIME_MIDBLK_COMPRESS

◆ time_panel

double precision dmumps_lr_stats::time_panel

Definition at line 63 of file dlr_stats.F.

63 DOUBLE PRECISION :: TIME_PANEL

◆ time_upd_nelim

double precision dmumps_lr_stats::time_upd_nelim

Definition at line 60 of file dlr_stats.F.

60 DOUBLE PRECISION :: TIME_UPD_NELIM

◆ time_update

double precision dmumps_lr_stats::time_update

Definition at line 49 of file dlr_stats.F.

49 DOUBLE PRECISION :: TIME_UPDATE

◆ time_update_frfr

double precision dmumps_lr_stats::time_update_frfr

Definition at line 54 of file dlr_stats.F.

54 DOUBLE PRECISION :: TIME_UPDATE_FRFR

◆ time_update_frlr

double precision dmumps_lr_stats::time_update_frlr

Definition at line 53 of file dlr_stats.F.

53 DOUBLE PRECISION :: TIME_UPDATE_FRLR

◆ time_update_lrlr1

double precision dmumps_lr_stats::time_update_lrlr1

Definition at line 50 of file dlr_stats.F.

50 DOUBLE PRECISION :: TIME_UPDATE_LRLR1

◆ time_update_lrlr2

double precision dmumps_lr_stats::time_update_lrlr2

Definition at line 51 of file dlr_stats.F.

51 DOUBLE PRECISION :: TIME_UPDATE_LRLR2

◆ time_update_lrlr3

double precision dmumps_lr_stats::time_update_lrlr3

Definition at line 52 of file dlr_stats.F.

52 DOUBLE PRECISION :: TIME_UPDATE_LRLR3

◆ total_flop

double precision dmumps_lr_stats::total_flop

Definition at line 48 of file dlr_stats.F.

48 DOUBLE PRECISION :: TOTAL_FLOP

◆ total_nblocks_ass

integer dmumps_lr_stats::total_nblocks_ass

Definition at line 84 of file dlr_stats.F.

84 INTEGER :: TOTAL_NBLOCKS_ASS, TOTAL_NBLOCKS_CB

◆ total_nblocks_cb

integer dmumps_lr_stats::total_nblocks_cb

Definition at line 84 of file dlr_stats.F.