You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.2 KiB
85 lines
2.2 KiB
/*
|
|
* Copyright(C) 1999-2022 National Technology & Engineering Solutions
|
|
* of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
|
|
* NTESS, the U.S. Government retains certain rights in this software.
|
|
*
|
|
* See packages/seacas/LICENSE for details
|
|
*/
|
|
/*
|
|
*/
|
|
|
|
/*
|
|
* DESCRIPTION:
|
|
* This routine returns an accumulated CPU time. The base time is
|
|
* undefined; only relative times are valid.
|
|
*
|
|
* FORMAL PARAMETERS:
|
|
* CPUSEC REAL CPU time
|
|
*
|
|
*/
|
|
|
|
#include "fortranc.h"
|
|
|
|
#if defined(aix) || defined(__VACPP__) || defined(hpux) || defined(sgi) || defined(__osf__) || \
|
|
defined(__linux__) || defined(__APPLE__) || defined(__CYGWIN__)
|
|
|
|
#if defined(__NO_CYGWIN_OPTION__)
|
|
#define NOMINMAX
|
|
#include <windows.h>
|
|
#else
|
|
#include <sys/resource.h>
|
|
#include <sys/time.h>
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(interix)
|
|
#include <time.h>
|
|
void excpus_(FTNREAL *cpusec)
|
|
#endif /* interix */
|
|
|
|
#if defined ADDC_
|
|
void excpus_(FTNREAL *cpusec)
|
|
#else
|
|
void excpus(FTNREAL *cpusec)
|
|
#endif
|
|
{
|
|
#if defined(interix)
|
|
*cpusec = ((FTNREAL)clock()) / CLOCKS_PER_SEC;
|
|
#endif /* interix */
|
|
|
|
#if defined(__NO_CYGWIN_OPTION__)
|
|
FILETIME createTime;
|
|
FILETIME exitTime;
|
|
FILETIME kernelTimeProcess;
|
|
FILETIME userTimeProcess;
|
|
HANDLE hProcess = GetCurrentProcess();
|
|
LONGLONG tUser, tKernel;
|
|
|
|
// Retrieve the file times for the process.
|
|
if (hProcess) {
|
|
// Get process times
|
|
if (!GetProcessTimes(hProcess, &createTime, &exitTime, &kernelTimeProcess, &userTimeProcess))
|
|
*cpusec = 0.0;
|
|
else {
|
|
// Convert to 64-bit LONGLONG
|
|
tUser = *(LONGLONG *)&userTimeProcess;
|
|
tKernel = *(LONGLONG *)&kernelTimeProcess;
|
|
// Time interval 100 nanoseconds, divide by 10,000,000
|
|
// to convert to seconds
|
|
*cpusec = ((double)(tUser) + (double)(tKernel)) / 10000000.0;
|
|
}
|
|
}
|
|
else {
|
|
*cpusec = 0.0;
|
|
}
|
|
#endif
|
|
|
|
#if defined(sgi) || defined(__osf__) || defined(__linux__) || defined(aix) || \
|
|
defined(__VACPP__) || defined(paragon) || defined(hpux) || defined(__APPLE__)
|
|
struct rusage rusage;
|
|
getrusage(RUSAGE_SELF, &rusage);
|
|
long secs = rusage.ru_utime.tv_sec + rusage.ru_stime.tv_sec;
|
|
long mics = rusage.ru_utime.tv_usec + rusage.ru_stime.tv_usec;
|
|
*cpusec = (FTNREAL)secs + ((FTNREAL)mics / 1.e6);
|
|
#endif
|
|
}
|
|
|