OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
smumps_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 smumps_lr_stats::collect_blocksizes ( integer, dimension(:), pointer cut,
integer, intent(in) npartsass,
integer, intent(in) npartscb )

Definition at line 89 of file slr_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 smumps_lr_stats::compute_global_gains ( integer(8), intent(in) nb_entries_factor,
real, 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 slr_stats.F.

535 INTEGER(8), INTENT(IN) :: NB_ENTRIES_FACTOR
536 INTEGER, INTENT(IN) :: MPG
537 LOGICAL, INTENT(IN) :: PROKG
538 REAL, 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 smumps_lr_stats::init_stats_global ( type (smumps_struc), target id)

Definition at line 343 of file slr_stats.F.

345 TYPE (SMUMPS_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 smumps_lr_stats::saveandwrite_gains ( integer, intent(in) local,
integer, intent(in) k489,
real, 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 slr_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 REAL :: 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 & ,real(k8110),' (100.0%)'
612 WRITE(mpg,'(A,ES10.3,A,F5.1,A)')
613 & ' INFOG(35) Effective nb of entries (% of INFOG(29)) ='
614 & ,real(k849),' ('
615 & ,real(100)*(real(k849)/real(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)=real(total_flop)
622 dkeep(60)=real(100)
623 dkeep(56)=real(flop_facto_lr+flop_frfronts)
624 dkeep(61)=real(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 smumps_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 slr_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 smumps_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 slr_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 smumps_lr_stats::upd_flop_decompress ( double precision, intent(in) f,
logical, intent(in) cb )

Definition at line 139 of file slr_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 smumps_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 slr_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 smumps_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 slr_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 smumps_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 slr_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 smumps_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 slr_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 smumps_lr_stats::upd_flop_trsm ( type(lrb_type), intent(in) lrb,
integer, intent(in) loru )

Definition at line 198 of file slr_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 smumps_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 slr_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 smumps_lr_stats::upd_flop_update_lrlr3 ( type(lrb_type), intent(in) lrb,
integer, intent(in) niv )

Definition at line 319 of file slr_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 smumps_lr_stats::upd_mry_cb_fr ( integer, intent(in) nrows,
integer, intent(in) ncols,
integer, intent(in) sym )

Definition at line 426 of file slr_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 smumps_lr_stats::upd_mry_cb_lrgain ( type(lrb_type), intent(in) lrb)

Definition at line 440 of file slr_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 smumps_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 slr_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 smumps_lr_stats::upd_mry_lu_lrgain ( type(lrb_type), dimension(:), intent(in) blr_panel,
integer, intent(in) nbblocks )

Definition at line 450 of file slr_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 smumps_lr_stats::avg_blocksize_ass

Definition at line 87 of file slr_stats.F.

87 DOUBLE PRECISION :: AVG_BLOCKSIZE_ASS, AVG_BLOCKSIZE_CB

◆ avg_blocksize_cb

double precision smumps_lr_stats::avg_blocksize_cb

Definition at line 87 of file slr_stats.F.

◆ avg_flop_facto_lr

double precision smumps_lr_stats::avg_flop_facto_lr

Definition at line 81 of file slr_stats.F.

81 DOUBLE PRECISION :: AVG_FLOP_FACTO_LR

◆ cnt_nodes

integer smumps_lr_stats::cnt_nodes

Definition at line 23 of file slr_stats.F.

23 INTEGER :: CNT_NODES

◆ factor_processed_fraction

double precision smumps_lr_stats::factor_processed_fraction

Definition at line 46 of file slr_stats.F.

46 DOUBLE PRECISION :: FACTOR_PROCESSED_FRACTION

◆ factor_size

integer(kind=8) smumps_lr_stats::factor_size

Definition at line 47 of file slr_stats.F.

47 INTEGER(KIND=8) :: FACTOR_SIZE

◆ flop_accum_compress

double precision smumps_lr_stats::flop_accum_compress

Definition at line 38 of file slr_stats.F.

◆ flop_cb_compress

double precision smumps_lr_stats::flop_cb_compress

Definition at line 38 of file slr_stats.F.

◆ flop_cb_decompress

double precision smumps_lr_stats::flop_cb_decompress

Definition at line 38 of file slr_stats.F.

◆ flop_compress

double precision smumps_lr_stats::flop_compress

Definition at line 38 of file slr_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 smumps_lr_stats::flop_decompress

Definition at line 38 of file slr_stats.F.

◆ flop_facto_fr

double precision smumps_lr_stats::flop_facto_fr

Definition at line 24 of file slr_stats.F.

◆ flop_facto_lr

double precision smumps_lr_stats::flop_facto_lr

Definition at line 24 of file slr_stats.F.

◆ flop_frfronts

double precision smumps_lr_stats::flop_frfronts

Definition at line 38 of file slr_stats.F.

◆ flop_frswap_compress

double precision smumps_lr_stats::flop_frswap_compress

Definition at line 38 of file slr_stats.F.

◆ flop_lrgain

double precision smumps_lr_stats::flop_lrgain

Definition at line 24 of file slr_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 smumps_lr_stats::flop_midblk_compress

Definition at line 38 of file slr_stats.F.

◆ flop_panel

double precision smumps_lr_stats::flop_panel

Definition at line 24 of file slr_stats.F.

◆ flop_trsm

double precision smumps_lr_stats::flop_trsm

Definition at line 24 of file slr_stats.F.

◆ flop_trsm_fr

double precision smumps_lr_stats::flop_trsm_fr

Definition at line 24 of file slr_stats.F.

◆ flop_trsm_lr

double precision smumps_lr_stats::flop_trsm_lr

Definition at line 24 of file slr_stats.F.

◆ flop_update_fr

double precision smumps_lr_stats::flop_update_fr

Definition at line 24 of file slr_stats.F.

◆ flop_update_frfr

double precision smumps_lr_stats::flop_update_frfr

Definition at line 24 of file slr_stats.F.

◆ flop_update_frlr

double precision smumps_lr_stats::flop_update_frlr

Definition at line 24 of file slr_stats.F.

◆ flop_update_lr

double precision smumps_lr_stats::flop_update_lr

Definition at line 24 of file slr_stats.F.

◆ flop_update_lrlr1

double precision smumps_lr_stats::flop_update_lrlr1

Definition at line 24 of file slr_stats.F.

◆ flop_update_lrlr2

double precision smumps_lr_stats::flop_update_lrlr2

Definition at line 24 of file slr_stats.F.

◆ flop_update_lrlr3

double precision smumps_lr_stats::flop_update_lrlr3

Definition at line 24 of file slr_stats.F.

◆ global_mry_lpro_compr

double precision smumps_lr_stats::global_mry_lpro_compr

Definition at line 17 of file slr_stats.F.

◆ global_mry_ltot_compr

double precision smumps_lr_stats::global_mry_ltot_compr

Definition at line 17 of file slr_stats.F.

◆ max_blocksize_ass

integer smumps_lr_stats::max_blocksize_ass

Definition at line 85 of file slr_stats.F.

◆ max_blocksize_cb

integer smumps_lr_stats::max_blocksize_cb

Definition at line 86 of file slr_stats.F.

◆ max_flop_facto_lr

double precision smumps_lr_stats::max_flop_facto_lr

Definition at line 83 of file slr_stats.F.

83 DOUBLE PRECISION :: MAX_FLOP_FACTO_LR

◆ min_blocksize_ass

integer smumps_lr_stats::min_blocksize_ass

Definition at line 85 of file slr_stats.F.

85 INTEGER :: MIN_BLOCKSIZE_ASS, MAX_BLOCKSIZE_ASS

◆ min_blocksize_cb

integer smumps_lr_stats::min_blocksize_cb

Definition at line 86 of file slr_stats.F.

86 INTEGER :: MIN_BLOCKSIZE_CB, MAX_BLOCKSIZE_CB

◆ min_flop_facto_lr

double precision smumps_lr_stats::min_flop_facto_lr

Definition at line 82 of file slr_stats.F.

82 DOUBLE PRECISION :: MIN_FLOP_FACTO_LR

◆ mry_cb_fr

double precision smumps_lr_stats::mry_cb_fr

Definition at line 17 of file slr_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 smumps_lr_stats::mry_cb_lrgain

Definition at line 17 of file slr_stats.F.

◆ mry_lu_fr

double precision smumps_lr_stats::mry_lu_fr

Definition at line 17 of file slr_stats.F.

◆ mry_lu_lrgain

double precision smumps_lr_stats::mry_lu_lrgain

Definition at line 17 of file slr_stats.F.

◆ time_cb_compress

double precision smumps_lr_stats::time_cb_compress

Definition at line 58 of file slr_stats.F.

58 DOUBLE PRECISION :: TIME_CB_COMPRESS

◆ time_compress

double precision smumps_lr_stats::time_compress

Definition at line 55 of file slr_stats.F.

55 DOUBLE PRECISION :: TIME_COMPRESS

◆ time_decomp

double precision smumps_lr_stats::time_decomp

Definition at line 69 of file slr_stats.F.

69 DOUBLE PRECISION :: TIME_DECOMP

◆ time_decomp_asm1

double precision smumps_lr_stats::time_decomp_asm1

Definition at line 71 of file slr_stats.F.

71 DOUBLE PRECISION :: TIME_DECOMP_ASM1

◆ time_decomp_asms2m

double precision smumps_lr_stats::time_decomp_asms2m

Definition at line 75 of file slr_stats.F.

75 DOUBLE PRECISION :: TIME_DECOMP_ASMS2M

◆ time_decomp_asms2s

double precision smumps_lr_stats::time_decomp_asms2s

Definition at line 74 of file slr_stats.F.

74 DOUBLE PRECISION :: TIME_DECOMP_ASMS2S

◆ time_decomp_locasm2

double precision smumps_lr_stats::time_decomp_locasm2

Definition at line 72 of file slr_stats.F.

72 DOUBLE PRECISION :: TIME_DECOMP_LOCASM2

◆ time_decomp_maplig1

double precision smumps_lr_stats::time_decomp_maplig1

Definition at line 73 of file slr_stats.F.

73 DOUBLE PRECISION :: TIME_DECOMP_MAPLIG1

◆ time_decomp_ucfs

double precision smumps_lr_stats::time_decomp_ucfs

Definition at line 70 of file slr_stats.F.

70 DOUBLE PRECISION :: TIME_DECOMP_UCFS

◆ time_diagcopy

double precision smumps_lr_stats::time_diagcopy

Definition at line 68 of file slr_stats.F.

68 DOUBLE PRECISION :: TIME_DIAGCOPY

◆ time_fac_i

double precision smumps_lr_stats::time_fac_i

Definition at line 64 of file slr_stats.F.

64 DOUBLE PRECISION :: TIME_FAC_I

◆ time_fac_mq

double precision smumps_lr_stats::time_fac_mq

Definition at line 65 of file slr_stats.F.

65 DOUBLE PRECISION :: TIME_FAC_MQ

◆ time_fac_sq

double precision smumps_lr_stats::time_fac_sq

Definition at line 66 of file slr_stats.F.

66 DOUBLE PRECISION :: TIME_FAC_SQ

◆ time_frfronts

double precision smumps_lr_stats::time_frfronts

Definition at line 67 of file slr_stats.F.

67 DOUBLE PRECISION :: TIME_FRFRONTS

◆ time_frswap_compress

double precision smumps_lr_stats::time_frswap_compress

Definition at line 57 of file slr_stats.F.

57 DOUBLE PRECISION :: TIME_FRSWAP_COMPRESS

◆ time_frtrsm

double precision smumps_lr_stats::time_frtrsm

Definition at line 62 of file slr_stats.F.

62 DOUBLE PRECISION :: TIME_FRTRSM

◆ time_lr_module

double precision smumps_lr_stats::time_lr_module

Definition at line 59 of file slr_stats.F.

59 DOUBLE PRECISION :: TIME_LR_MODULE

◆ time_lrana_gethalo

double precision smumps_lr_stats::time_lrana_gethalo

Definition at line 78 of file slr_stats.F.

78 DOUBLE PRECISION :: TIME_LRANA_GETHALO

◆ time_lrana_gnew

double precision smumps_lr_stats::time_lrana_gnew

Definition at line 80 of file slr_stats.F.

80 DOUBLE PRECISION :: TIME_LRANA_GNEW

◆ time_lrana_kway

double precision smumps_lr_stats::time_lrana_kway

Definition at line 79 of file slr_stats.F.

79 DOUBLE PRECISION :: TIME_LRANA_KWAY

◆ time_lrana_lrgrouping

double precision smumps_lr_stats::time_lrana_lrgrouping

Definition at line 76 of file slr_stats.F.

76 DOUBLE PRECISION :: TIME_LRANA_LRGROUPING

◆ time_lrana_sepgrouping

double precision smumps_lr_stats::time_lrana_sepgrouping

Definition at line 77 of file slr_stats.F.

77 DOUBLE PRECISION :: TIME_LRANA_SEPGROUPING

◆ time_lrtrsm

double precision smumps_lr_stats::time_lrtrsm

Definition at line 61 of file slr_stats.F.

61 DOUBLE PRECISION :: TIME_LRTRSM

◆ time_midblk_compress

double precision smumps_lr_stats::time_midblk_compress

Definition at line 56 of file slr_stats.F.

56 DOUBLE PRECISION :: TIME_MIDBLK_COMPRESS

◆ time_panel

double precision smumps_lr_stats::time_panel

Definition at line 63 of file slr_stats.F.

63 DOUBLE PRECISION :: TIME_PANEL

◆ time_upd_nelim

double precision smumps_lr_stats::time_upd_nelim

Definition at line 60 of file slr_stats.F.

60 DOUBLE PRECISION :: TIME_UPD_NELIM

◆ time_update

double precision smumps_lr_stats::time_update

Definition at line 49 of file slr_stats.F.

49 DOUBLE PRECISION :: TIME_UPDATE

◆ time_update_frfr

double precision smumps_lr_stats::time_update_frfr

Definition at line 54 of file slr_stats.F.

54 DOUBLE PRECISION :: TIME_UPDATE_FRFR

◆ time_update_frlr

double precision smumps_lr_stats::time_update_frlr

Definition at line 53 of file slr_stats.F.

53 DOUBLE PRECISION :: TIME_UPDATE_FRLR

◆ time_update_lrlr1

double precision smumps_lr_stats::time_update_lrlr1

Definition at line 50 of file slr_stats.F.

50 DOUBLE PRECISION :: TIME_UPDATE_LRLR1

◆ time_update_lrlr2

double precision smumps_lr_stats::time_update_lrlr2

Definition at line 51 of file slr_stats.F.

51 DOUBLE PRECISION :: TIME_UPDATE_LRLR2

◆ time_update_lrlr3

double precision smumps_lr_stats::time_update_lrlr3

Definition at line 52 of file slr_stats.F.

52 DOUBLE PRECISION :: TIME_UPDATE_LRLR3

◆ total_flop

double precision smumps_lr_stats::total_flop

Definition at line 48 of file slr_stats.F.

48 DOUBLE PRECISION :: TOTAL_FLOP

◆ total_nblocks_ass

integer smumps_lr_stats::total_nblocks_ass

Definition at line 84 of file slr_stats.F.

84 INTEGER :: TOTAL_NBLOCKS_ASS, TOTAL_NBLOCKS_CB

◆ total_nblocks_cb

integer smumps_lr_stats::total_nblocks_cb

Definition at line 84 of file slr_stats.F.