Helper-routine used by dbcsr_mm_sched_process to supply statistics.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(stats_type), | intent(inout) | :: | stats | |||
integer, | intent(in) | :: | m | |||
integer, | intent(in) | :: | n | |||
integer, | intent(in) | :: | k | |||
integer(kind=int_8), | optional | :: | stacksize_cpu | |||
integer(kind=int_8), | optional | :: | stacksize_smm | |||
integer(kind=int_8), | optional | :: | stacksize_acc | |||
integer(kind=int_8), | optional | :: | nstacks_cpu | |||
integer(kind=int_8), | optional | :: | nstacks_smm | |||
integer(kind=int_8), | optional | :: | nstacks_acc |
SUBROUTINE stats_add(stats, m, n, k, stacksize_cpu, stacksize_smm, stacksize_acc, &
nstacks_cpu, nstacks_smm, nstacks_acc)
!! Helper-routine used by dbcsr_mm_sched_process to supply statistics.
TYPE(stats_type), INTENT(INOUT) :: stats
INTEGER, INTENT(IN) :: m, n, k
INTEGER(kind=int_8), OPTIONAL :: stacksize_cpu, stacksize_smm, &
stacksize_acc, nstacks_cpu, &
nstacks_smm, nstacks_acc
INTEGER :: i, s
INTEGER(kind=int_8) :: my_nstacks_acc, my_nstacks_cpu, &
my_nstacks_smm, my_stacksize_acc, &
my_stacksize_cpu, my_stacksize_smm
INTEGER(kind=int_8), ALLOCATABLE, DIMENSION(:, :) :: tmp
my_stacksize_cpu = 0
my_stacksize_smm = 0
my_stacksize_acc = 0
IF (PRESENT(stacksize_cpu)) my_stacksize_cpu = stacksize_cpu
IF (PRESENT(stacksize_smm)) my_stacksize_smm = stacksize_smm
IF (PRESENT(stacksize_acc)) my_stacksize_acc = stacksize_acc
my_nstacks_cpu = MERGE(1, 0, my_stacksize_cpu > 0)
my_nstacks_smm = MERGE(1, 0, my_stacksize_smm > 0)
my_nstacks_acc = MERGE(1, 0, my_stacksize_acc > 0)
IF (PRESENT(nstacks_cpu)) my_nstacks_cpu = nstacks_cpu
IF (PRESENT(nstacks_smm)) my_nstacks_smm = nstacks_smm
IF (PRESENT(nstacks_acc)) my_nstacks_acc = nstacks_acc
DO i = 1, SIZE(stats%num_mnk_stacks, 1)
IF (stats%num_mnk_stacks(i, 1) == m .AND. &
stats%num_mnk_stacks(i, 2) == n .AND. &
stats%num_mnk_stacks(i, 3) == k) THEN
stats%num_mnk_stacks(i, 4) = stats%num_mnk_stacks(i, 4) + my_stacksize_cpu
stats%num_mnk_stacks(i, 5) = stats%num_mnk_stacks(i, 5) + my_stacksize_smm
stats%num_mnk_stacks(i, 6) = stats%num_mnk_stacks(i, 6) + my_stacksize_acc
stats%num_mnk_stacks(i, 7) = stats%num_mnk_stacks(i, 7) + my_nstacks_cpu
stats%num_mnk_stacks(i, 8) = stats%num_mnk_stacks(i, 8) + my_nstacks_smm
stats%num_mnk_stacks(i, 9) = stats%num_mnk_stacks(i, 9) + my_nstacks_acc
RETURN
END IF
END DO
!not found, ok lets grow the list
s = SIZE(stats%num_mnk_stacks, 1)
ALLOCATE (tmp(s, 9))
tmp(:, :) = stats%num_mnk_stacks(:, :)
DEALLOCATE (stats%num_mnk_stacks)
ALLOCATE (stats%num_mnk_stacks(s + 1, 9))
stats%num_mnk_stacks(1:s, :) = tmp(:, :)
stats%num_mnk_stacks(s + 1, 1) = m
stats%num_mnk_stacks(s + 1, 2) = n
stats%num_mnk_stacks(s + 1, 3) = k
stats%num_mnk_stacks(s + 1, 4) = my_stacksize_cpu
stats%num_mnk_stacks(s + 1, 5) = my_stacksize_smm
stats%num_mnk_stacks(s + 1, 6) = my_stacksize_acc
stats%num_mnk_stacks(s + 1, 7) = my_nstacks_cpu
stats%num_mnk_stacks(s + 1, 8) = my_nstacks_smm
stats%num_mnk_stacks(s + 1, 9) = my_nstacks_acc
DEALLOCATE (tmp)
END SUBROUTINE stats_add