Collects statistics from all OpenMP-threads into report
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(stats_type), | intent(inout) | :: | report |
SUBROUTINE stats_collect_from_threads(report)
!! Collects statistics from all OpenMP-threads into report
TYPE(stats_type), INTENT(INOUT) :: report
INTEGER :: i, j, nthreads
TYPE(stats_type), POINTER :: istats
!$OMP PARALLEL DEFAULT(NONE) SHARED(nthreads)
!$OMP MASTER
nthreads = 1
!$ nthreads = OMP_GET_NUM_THREADS()
!$OMP END MASTER
!$OMP END PARALLEL
DO i = 0, nthreads - 1
istats => stats_per_thread(i)
report%cpu_num_stacks = report%cpu_num_stacks + istats%cpu_num_stacks
report%smm_num_stacks = report%smm_num_stacks + istats%smm_num_stacks
report%acc_num_stacks = report%acc_num_stacks + istats%acc_num_stacks
report%acc_flop = report%acc_flop + istats%acc_flop
report%smm_flop = report%smm_flop + istats%smm_flop
report%cpu_flop = report%cpu_flop + istats%cpu_flop
DO j = 1, SIZE(istats%num_mnk_stacks, 1)
CALL stats_add(report, &
m=INT(istats%num_mnk_stacks(j, 1), kind=int_4), &
n=INT(istats%num_mnk_stacks(j, 2), kind=int_4), &
k=INT(istats%num_mnk_stacks(j, 3), kind=int_4), &
stacksize_cpu=istats%num_mnk_stacks(j, 4), &
stacksize_smm=istats%num_mnk_stacks(j, 5), &
stacksize_acc=istats%num_mnk_stacks(j, 6), &
nstacks_cpu=istats%num_mnk_stacks(j, 7), &
nstacks_smm=istats%num_mnk_stacks(j, 8), &
nstacks_acc=istats%num_mnk_stacks(j, 9))
END DO
END DO
END SUBROUTINE stats_collect_from_threads