`DTIME` — 실행 시간 측정
DTIME — 실행 시간 측정
프로그램이 실제로 얼마나 오래 실행됐는지, 그 시간이 사용자·시스템 어느 쪽에서 소모됐는지 알고 싶을 때가 있어요. DTIME은 프로세스 실행 시작부터의 경과 시간을 사용자·시스템 구성 요소로 나누어 돌려주는 서브루틴(또는 함수)이에요.
출처: gfortran — DTIME
본문
시그니처
CALL DTIME(VALUES, TIME)
TIME = DTIME(VALUES), (권장하지 않아요)
설명
DTIME(VALUES, TIME)은 처음 호출되면 프로세스 실행 시작부터의 런타임(초)을 TIME에 담아요. VALUES는 이 시간의 사용자·시스템 구성 요소를 각각 VALUES(1), VALUES(2)에 담아요. TIME은 VALUES(1) + VALUES(2)와 같아요.
이후 호출에서는 이전 호출 이후로 누적된 값을 반환해요.
일부 시스템에서는 내부 시간이 32비트처럼 한계가 작은 타입으로 표현돼 넘침(wrap around)이 일어날 수 있어요. 그래서 이 내장 함수가 돌려주는 값이 음수가 되거나, 한 번의 프로그램 실행 중에 이전 값보다 작아질 수 있어요.
이 구현은 OpenMP 지시어 안에서 쓰면 스레드 안전(thread safe)해요. 다만 여러 스레드에서 DTIME을 호출하면 결과는 여전히 '마지막 호출 이후의 시간'이라 의도한 결과를 얻지 못할 수 있어요. 가능하면 CPU_TIME을 쓰는 게 좋아요.
이 내장 함수는 서브루틴과 함수 두 형태로 제공되지만, 하나의 프로그램 단위에서는 두 형태 중 하나만 쓸 수 있어요.
클래스
서브루틴, 함수
인자
VALUES—REAL(4),DIMENSION(2)타입.TIME—REAL(4)타입. 둘 다INTENT(OUT)이에요.
반환값
이전 호출 이후 또는 (한 번도 호출하지 않았다면) 프로그램 실행 시작 이후의 경과 시간(초)이에요.
예제
program test_dtime
integer(8) :: i, j
real, dimension(2) :: tarray
real :: result
call dtime(tarray, result)
print *, result
print *, tarray(1)
print *, tarray(2)
do i=1,100000000 ! Just a delay
j = i * i - i
end do
call dtime(tarray, result)
print *, result
print *, tarray(1)
print *, tarray(2)
end program test_dtime
먼저 한 번 호출해 현재까지의 실행 시간을 확인하고, 큰 반복문으로 잠깐 일부러 시간을 보낸 뒤 다시 호출해 그 사이 소모된 시간을 보는 예시예요.
표준
GNU 확장(GNU extension)
함께 보기
- CPU_TIME — CPU 경과 시간(초)