Intel® Fortran Compiler 16.0 User and Reference Guide
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