/[escript]/branches/arrexp_2137_win_merge/escript/src/Utils.cpp
ViewVC logotype

Annotation of /branches/arrexp_2137_win_merge/escript/src/Utils.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2219 - (hide annotations)
Wed Jan 14 04:31:34 2009 UTC (10 years, 7 months ago) by jfenwick
File size: 2603 byte(s)
Merging changes from trunk 2098:2218
1 gross 391
2 ksteube 1312 /*******************************************************
3 ksteube 1811 *
4     * Copyright (c) 2003-2008 by University of Queensland
5     * Earth Systems Science Computational Center (ESSCC)
6     * http://www.uq.edu.au/esscc
7     *
8     * Primary Business: Queensland, Australia
9     * Licensed under the Open Software License version 3.0
10     * http://www.opensource.org/licenses/osl-3.0.php
11     *
12     *******************************************************/
13 ksteube 1312
14 ksteube 1811
15 ksteube 1806 #include <string.h>
16    
17 jgs 474 #include "Utils.h"
18 gross 797 #include "DataVector.h"
19 gross 391
20 jgs 478 #ifdef _OPENMP
21     #include <omp.h>
22     #endif
23    
24 ksteube 1561 #ifdef PASO_MPI
25     #include <mpi.h>
26     #endif
27    
28 phornby 1628 #ifdef _WIN32
29     #include <WinSock2.h>
30 phornby 1835 #else
31     #include <unistd.h>
32 phornby 1628 #endif
33    
34 gross 391 namespace escript {
35    
36 ksteube 1247 int getSvnVersion()
37     {
38     #ifdef SVN_VERSION
39     return SVN_VERSION;
40     #else
41     return 0;
42     #endif
43     }
44    
45 ksteube 1620 /* This is probably not very robust, but it works on Savanna today and is useful for performance analysis */
46     int get_core_id() {
47     int processor_num=-1;
48     #ifdef CORE_ID1
49     FILE *fp;
50     int i, count_spaces=0;
51     char fname[100];
52     char buf[1000];
53    
54     sprintf(fname, "/proc/%d/stat", getpid());
55     fp = fopen(fname, "r");
56     if (fp == NULL) return(-1);
57     fgets(buf, 1000, fp);
58     fclose(fp);
59    
60     for (i=strlen(buf)-1; i>=0; i--) {
61     if (buf[i] == ' ') count_spaces++;
62     if (count_spaces == 4) break;
63     }
64     processor_num = atoi(&buf[i+1]);
65     #endif
66     return(processor_num);
67     }
68    
69    
70 ksteube 1561 void printParallelThreadCnt()
71     {
72     int mpi_iam=0, mpi_num=1;
73 ksteube 1568 char hname[64];
74 ksteube 1561
75 ksteube 1705 #ifdef HAVE_GETHOSTNAME
76 ksteube 1568 gethostname(hname, 64);
77 ksteube 1806 hname[63] = '\0';
78 ksteube 1705 #else
79     strcpy(hname, "unknown host");
80     #endif
81 ksteube 1567
82 ksteube 1561 #ifdef PASO_MPI
83     MPI_Comm_rank(MPI_COMM_WORLD, &mpi_iam);
84     MPI_Comm_size(MPI_COMM_WORLD, &mpi_num);
85     #endif
86    
87     #pragma omp parallel
88     {
89     int omp_iam=0, omp_num=1;
90     #ifdef _OPENMP
91     omp_iam = omp_get_thread_num(); /* Call in a parallel region */
92     omp_num = omp_get_num_threads();
93     #endif
94 ksteube 1620 printf("printParallelThreadCounts: MPI=%03d/%03d OpenMP=%03d/%03d running on %s core %d\n",
95     mpi_iam, mpi_num, omp_iam, omp_num, hname, get_core_id());
96 ksteube 1561 }
97     }
98    
99 gross 391 void setNumberOfThreads(const int num_threads)
100     {
101    
102     #ifdef _OPENMP
103     omp_set_num_threads(num_threads);
104     #endif
105    
106     }
107    
108     int getNumberOfThreads()
109     {
110     #ifdef _OPENMP
111     return omp_get_max_threads();
112     #else
113     return 1;
114     #endif
115    
116     }
117    
118 ksteube 1805 int getMPISizeWorld() {
119     int mpi_num = 1;
120     #ifdef PASO_MPI
121     MPI_Comm_size(MPI_COMM_WORLD, &mpi_num);
122     #endif
123     return mpi_num;
124     }
125    
126     int getMPIRankWorld() {
127     int mpi_iam = 0;
128     #ifdef PASO_MPI
129     MPI_Comm_rank(MPI_COMM_WORLD, &mpi_iam);
130     #endif
131     return mpi_iam;
132     }
133    
134 jfenwick 2219 double getMachinePrecision() {
135     return DBL_EPSILON;
136     }
137     double getMaxFloat() {
138     return DBL_MAX;
139     }
140    
141    
142 gross 391 } // end of namespace

  ViewVC Help
Powered by ViewVC 1.1.26