#include <deal.II/base/multithread_info.h>
-#if defined(__linux__)
-# include <fstream>
-# include <string>
-#endif
-
-#if defined(__sun__) || defined(__osf__) || defined(_AIX)
-# include <unistd.h>
-#endif
-
-#if defined(__sgi__)
+#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
*/
-# if defined(__linux__)
-
-unsigned int MultithreadInfo::get_n_cpus()
-{
- // on linux, we simply count the
- // number of lines listing
- // individual processors when
- // reading from /proc/cpuinfo
- std::ifstream cpuinfo;
- std::string search;
- unsigned int nCPU = 0;
-
- cpuinfo.open("/proc/cpuinfo");
-
- AssertThrow(cpuinfo,ExcProcNotPresent());
-
- while(cpuinfo)
- {
- cpuinfo >> search;
- if (search.find("processor") != std::string::npos)
- nCPU++;
- }
- cpuinfo.close();
-
- return nCPU;
-}
-
-# elif defined(__sun__) || defined(__osf__) || defined(_AIX)
+# if defined(__linux__) || defined(__sun__) || defined(__osf__) || defined(_AIX)
unsigned int MultithreadInfo::get_n_cpus()
{
return sysconf(_SC_NPROCESSORS_ONLN);
}
-
-# elif defined(__sgi__)
-
-unsigned int MultithreadInfo::get_n_cpus()
-{
- return sysconf(_SC_NPROC_ONLN);
-}
-
# elif defined(__MACH__) && defined(__APPLE__)
// This is only tested on a dual G5 2.5GHz running MacOSX 10.3.6
// and on an Intel Mac Book Pro.
return n_cpus;
}
-
# else
// If you get n_cpus=1 although you are on a multi-processor machine,
// these includes should probably be properly
// ./configure'd using the AC_HEADER_TIME macro:
-#ifndef DEAL_II_MSVC
+#if defined(HAVE_SYS_TIME_H) && defined(HAVE_SYS_RESOURCE_H)
# include <sys/time.h>
# include <sys/resource.h>
-#else
-# include <windows.h>
#endif
-// on SunOS 4.x, getrusage is stated in the man pages and exists, but
-// is not declared in resource.h. declare it ourselves
-#ifdef NO_HAVE_GETRUSAGE
-extern "C" {
- int getrusage(int who, struct rusage* ru);
-}
+#ifdef DEAL_II_MSVC
+# include <windows.h>
#endif
-DEAL_II_NAMESPACE_OPEN
+DEAL_II_NAMESPACE_OPEN
// in case we use an MPI compiler, need
// to create a communicator just for the
MPI_Barrier(mpi_communicator);
#endif
-#ifdef DEAL_II_MSVC
- start_wall_time = windows::wall_clock();
- start_time = windows::cpu_clock();
- start_time_children = start_time;
-#else
+#if defined(HAVE_SYS_TIME_H) && defined(HAVE_SYS_RESOURCE_H)
//TODO: Break this out into a function like the functions in
//namespace windows above
rusage usage_children;
getrusage (RUSAGE_CHILDREN, &usage_children);
start_time_children = usage_children.ru_utime.tv_sec + 1.e-6 * usage_children.ru_utime.tv_usec;
+
+#elif defined(DEAL_II_MSVC)
+ start_wall_time = windows::wall_clock();
+ start_time = windows::cpu_clock();
+ start_time_children = start_time;
+#else
+# error unsupported platform. Porting not finished.
#endif
}
{
running = false;
-#ifdef DEAL_II_MSVC
- double time = windows::wall_clock() - start_wall_time;
- cumulative_time += windows::cpu_clock() - start_time;
-#else
+#if defined(HAVE_SYS_TIME_H) && defined(HAVE_SYS_RESOURCE_H)
//TODO: Break this out into a function like the functions in
//namespace windows above
rusage usage;
gettimeofday(&wall_timer, NULL);
double time = wall_timer.tv_sec + 1.e-6 * wall_timer.tv_usec
- start_wall_time;
+#elif defined(DEAL_II_MSVC)
+ double time = windows::wall_clock() - start_wall_time;
+ cumulative_time += windows::cpu_clock() - start_time;
+#else
+# error Unsupported platform. Porting not finished.
#endif
#ifdef DEAL_II_COMPILER_USE_MPI
if (sync_wall_time && Utilities::System::job_supports_mpi())
{
if (running)
{
-#ifdef DEAL_II_MSVC
- const double running_time = windows::cpu_clock() - start_time + cumulative_time;
- return running_time;
-#else
+#if defined(HAVE_SYS_TIME_H) && defined(HAVE_SYS_RESOURCE_H)
rusage usage;
getrusage (RUSAGE_SELF, &usage);
const double dtime = usage.ru_utime.tv_sec + 1.e-6 * usage.ru_utime.tv_usec;
return Utilities::MPI::sum (running_time, mpi_communicator);
else
return running_time;
+#elif defined(DEAL_II_MSVC)
+ const double running_time = windows::cpu_clock() - start_time + cumulative_time;
+ return running_time;
+#else
+# error unsupported platform. Porting not finished.
#endif
}
else
{
if (running)
{
-#ifdef DEAL_II_MSVC
-//TODO[BG]: Do something useful here
- return 0;
-#else
+#if defined(HAVE_SYS_TIME_H) && defined(HAVE_SYS_RESOURCE_H)
struct timeval wall_timer;
gettimeofday(&wall_timer, NULL);
return (wall_timer.tv_sec
+ 1.e-6 * wall_timer.tv_usec
- start_wall_time
+ cumulative_wall_time);
+#else
+//TODO[BG]: Do something useful here
+ return 0;
#endif
}
else
#include <deal.II/lac/block_sparse_matrix.h>
#include <deal.II/lac/vector.h>
+#include <cerrno>
#include <iostream>
#include <list>
#include <typeinfo>
-// this is a weird hack: on newer linux systems, some system headers
-// include /usr/include/linux/compiler.h which explicitly checks which
-// gcc is in use. in that file is also a comment that explains that
-// the check for gcc version also applies to icc since icc identifies
-// itself as gcc via __GNUC__; if the gcc major version is not >=2, it
-// aborts.
-//
-// now, only icc8 and later identify themselves as gcc, so older icc
-// versions fail to compile this file on such systems. to avoid this
-// failure, we allow icc to identify itself as gcc if it doesn't
-// already do so by itself:
-#if defined(__INTEL_COMPILER) && !defined(__GNUC__)
-# define __GNUC__ 3
-#endif
-
-#ifndef DEAL_II_MSVC
-# include <sys/wait.h>
-# include <unistd.h>
-#ifndef DEAL_II_USE_DIRECT_ERRNO_H
-# include <errno.h>
-#else
-# include </usr/include/errno.h>
-#endif
-#include <sys/errno.h>
-#endif
-
-#include <pthread.h>
-#include <sys/types.h>
-#include <signal.h>
-
DEAL_II_NAMESPACE_OPEN