/[escript]/trunk/escript/src/Utils.cpp
ViewVC logotype

Contents of /trunk/escript/src/Utils.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1806 - (show annotations)
Thu Sep 25 00:36:10 2008 UTC (11 years ago) by ksteube
File size: 2530 byte(s)
Cleaned up use of gethostname

1
2 /* $Id$ */
3
4 /*******************************************************
5 *
6 * Copyright 2003-2007 by ACceSS MNRF
7 * Copyright 2007 by University of Queensland
8 *
9 * http://esscc.uq.edu.au
10 * Primary Business: Queensland, Australia
11 * Licensed under the Open Software License version 3.0
12 * http://www.opensource.org/licenses/osl-3.0.php
13 *
14 *******************************************************/
15
16 #include <unistd.h>
17 #include <string.h>
18
19 #include "Utils.h"
20 #include "DataVector.h"
21
22 #ifdef _OPENMP
23 #include <omp.h>
24 #endif
25
26 #ifdef PASO_MPI
27 #include <mpi.h>
28 #endif
29
30 #ifdef _WIN32
31 #include <WinSock2.h>
32 #endif
33
34 namespace escript {
35
36 int getSvnVersion()
37 {
38 #ifdef SVN_VERSION
39 return SVN_VERSION;
40 #else
41 return 0;
42 #endif
43 }
44
45 /* 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 void printParallelThreadCnt()
71 {
72 int mpi_iam=0, mpi_num=1;
73 char hname[64];
74
75 #ifdef HAVE_GETHOSTNAME
76 gethostname(hname, 64);
77 hname[63] = '\0';
78 #else
79 strcpy(hname, "unknown host");
80 #endif
81
82 #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 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 }
97 }
98
99 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 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 } // end of namespace

  ViewVC Help
Powered by ViewVC 1.1.26