Intel® Fortran Compiler 17.0 Developer Guide and Reference
POSIX Subroutine: Returns process times.
USE IFPOSIX
CALL PXFTIMES (jtms,itime,ierror)
jtms |
(Output) INTEGER(4). A handle of structure tms. |
itime |
(Output) INTEGER(4). The returned time since system startup. |
ierror |
(Output) INTEGER(4). The error status. |
If successful, ierror is set to zero; otherwise, an error code.
The PXFTIMES subroutine fills the fields of structure tms associated with handle jtms with components of time that was spent by the current process. The structure fields are:
tms_utime - User CPU time
tms_stime - System CPU time
tms_cutime - User time of child process
tms_cstime - System time of child process
All members are measured in system clocks. The values can be converted to seconds by dividing by value ival returned from the following call:
PXFSYSCONF(IPXFCONST('_SC_CLK_TCK'), ival, ierror)
User time is the time charged for the execution of user instructions of the calling process. System time is the time charged for execution by the system on behalf of the calling process.
To get a handle for an instance of the tms structure, use PXFSTRUCTCREATE with the string 'tms' for the structure name.
program test_uname
use ifposix
implicit none
integer(jhandle_size) jtms1, jtms2
integer(4) ierror,i
integer(4),parameter :: n=10000000
integer(SIZEOF_CLOCK_T) itime,time1,time2, user_time1,user_time2
integer(SIZEOF_CLOCK_T) system_time1,system_time2
integer(4) clocks_per_sec, iname
real(8) s, PI
real(8) seconds_user, seconds_system
print *,"Create a first instance for structure 'tms'"
call PXFSTRUCTCREATE("tms",jtms1,ierror)
if(ierror.NE.0) STOP 'Error: cannot create structure for handle jtms1'
print *,"Create a second instance for structure 'tms'"
call PXFSTRUCTCREATE("tms",jtms2,ierror)
if(ierror.NE.0) then
call PXFSTRUCTFREE(jtms1,ierror)
STOP 'Error: cannot create structure for handle jtms2'
end if
print *, 'Do some calculations'
call PXFTIMES(jtms1, itime,ierror)
if(ierror.NE.0) then
call PXFSTRUCTFREE(jtms1,ierror)
call PXFSTRUCTFREE(jtms2,ierror)
STOP 'Error: the first call of PXFTIMES fails'
end if
call PXFTIME(time1, ierror)
if(ierror.NE.0) then
call PXFSTRUCTFREE(jtms1,ierror)
call PXFSTRUCTFREE(jtms2,ierror)
STOP 'Error: the first call of PXFTIME fails'
end if
s = 0._8
PI = atan(1._8)*4
do i=0, n
s = s + cos(i*PI/n)*sin(i*PI/n)
end do
print *," s=",s
call PXFTIMES(jtms2, itime,ierror)
if(ierror.NE.0) then
call PXFSTRUCTFREE(jtms1,ierror)
call PXFSTRUCTFREE(jtms2,ierror)
STOP 'Error: the second call of PXFTIMES fails'
end if
call PXFTIME(time2, ierror)
if(ierror.NE.0) then
call PXFSTRUCTFREE(jtms1,ierror)
call PXFSTRUCTFREE(jtms2,ierror)
STOP 'Error: the second call of PXFTIME fails'
end if
!DIR$ IF DEFINED(_M_INNN)
call PXFINT8GET(jtms1,"tms_utime",user_time1,ierror)
call PXFINT8GET(jtms1,"tms_stime",system_time1,ierror)
call PXFINT8GET(jtms2,"tms_utime",user_time2,ierror)
call PXFINT8GET(jtms2,"tms_stime",system_time2,ierror)
!DIR$ ELSE
call PXFINTGET(jtms1,"tms_utime",user_time1,ierror)
call PXFINTGET(jtms1,"tms_stime",system_time1,ierror)
call PXFINTGET(jtms2,"tms_utime",user_time2,ierror)
call PXFINTGET(jtms2,"tms_stime",system_time2,ierror)
!DIR$ ENDIF
iname = IPXFCONST("_SC_CLK_TCK")
call PXFSYSCONF(iname,clocks_per_sec, ierror)
if(ierror.NE.0) then
call PXFSTRUCTFREE(jtms1,ierror)
call PXFSTRUCTFREE(jtms2,ierror)
STOP 'Error: the call of PXFSYSCONF fails'
end if
seconds_user = (user_time2 - user_time1)/DBLE(clocks_per_sec)
seconds_system = (system_time2 - system_time1)/DBLE(clocks_per_sec)
print *," The processor time of calculations:"
print *," User code execution(in seconds):", seconds_user
print *," Kernal code execution(in seconds):", seconds_system
print *," Total processor time(in seconds):", seconds_user + seconds_system
print *," Elapsed wall clock time(in seconds):", time2 - time1
print *,"Free memory for instance of structure associated with jtms"
call PXFSTRUCTFREE(jtms1,ierror)
call PXFSTRUCTFREE(jtms2,ierror)
end program