`DTIME` — 실행 시간 측정

DTIME — 실행 시간 측정

프로그램이 실제로 얼마나 오래 실행됐는지, 그 시간이 사용자·시스템 어느 쪽에서 소모됐는지 알고 싶을 때가 있어요. DTIME은 프로세스 실행 시작부터의 경과 시간을 사용자·시스템 구성 요소로 나누어 돌려주는 서브루틴(또는 함수)이에요.

출처: gfortran — DTIME

본문

시그니처

CALL DTIME(VALUES, TIME)
TIME = DTIME(VALUES), (권장하지 않아요)

설명

DTIME(VALUES, TIME)은 처음 호출되면 프로세스 실행 시작부터의 런타임(초)을 TIME에 담아요. VALUES는 이 시간의 사용자·시스템 구성 요소를 각각 VALUES(1), VALUES(2)에 담아요. TIMEVALUES(1) + VALUES(2)와 같아요.

이후 호출에서는 이전 호출 이후로 누적된 값을 반환해요.

일부 시스템에서는 내부 시간이 32비트처럼 한계가 작은 타입으로 표현돼 넘침(wrap around)이 일어날 수 있어요. 그래서 이 내장 함수가 돌려주는 값이 음수가 되거나, 한 번의 프로그램 실행 중에 이전 값보다 작아질 수 있어요.

이 구현은 OpenMP 지시어 안에서 쓰면 스레드 안전(thread safe)해요. 다만 여러 스레드에서 DTIME을 호출하면 결과는 여전히 '마지막 호출 이후의 시간'이라 의도한 결과를 얻지 못할 수 있어요. 가능하면 CPU_TIME을 쓰는 게 좋아요.

이 내장 함수는 서브루틴과 함수 두 형태로 제공되지만, 하나의 프로그램 단위에서는 두 형태 중 하나만 쓸 수 있어요.

클래스

서브루틴, 함수

인자

  • VALUESREAL(4), DIMENSION(2) 타입.
  • TIMEREAL(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)

함께 보기