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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 797 by gross, Thu Aug 3 02:03:18 2006 UTC revision 1811 by ksteube, Thu Sep 25 23:11:13 2008 UTC
# Line 1  Line 1 
1  /*  
2   ************************************************************  /*******************************************************
3   *          Copyright 2006 by ACcESS MNRF                   *  *
4   *                                                          *  * Copyright (c) 2003-2008 by University of Queensland
5   *              http://www.access.edu.au                    *  * Earth Systems Science Computational Center (ESSCC)
6   *       Primary Business: Queensland, Australia            *  * http://www.uq.edu.au/esscc
7   *  Licensed under the Open Software License version 3.0    *  *
8   *     http://www.opensource.org/licenses/osl-3.0.php       *  * 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    
14    
15    #include <unistd.h>
16    #include <string.h>
17    
18  #include "Utils.h"  #include "Utils.h"
19  #include "DataVector.h"  #include "DataVector.h"
# Line 17  Line 22 
22  #include <omp.h>  #include <omp.h>
23  #endif  #endif
24    
25    #ifdef PASO_MPI
26    #include <mpi.h>
27    #endif
28    
29    #ifdef  _WIN32
30    #include <WinSock2.h>
31    #endif
32    
33  namespace escript {  namespace escript {
34    
35    int getSvnVersion()
36    {
37    #ifdef SVN_VERSION
38      return SVN_VERSION;
39    #else
40      return 0;
41    #endif
42    }
43    
44    /* This is probably not very robust, but it works on Savanna today and is useful for performance analysis */
45    int get_core_id() {
46      int processor_num=-1;
47    #ifdef CORE_ID1
48      FILE *fp;
49      int i, count_spaces=0;
50      char fname[100];
51      char buf[1000];
52    
53      sprintf(fname, "/proc/%d/stat", getpid());
54      fp = fopen(fname, "r");
55      if (fp == NULL) return(-1);
56      fgets(buf, 1000, fp);
57      fclose(fp);
58    
59      for (i=strlen(buf)-1; i>=0; i--) {
60        if (buf[i] == ' ') count_spaces++;
61        if (count_spaces == 4) break;
62      }
63      processor_num = atoi(&buf[i+1]);
64    #endif
65      return(processor_num);
66    }
67    
68    
69    void printParallelThreadCnt()
70    {
71      int mpi_iam=0, mpi_num=1;
72      char hname[64];
73    
74    #ifdef HAVE_GETHOSTNAME
75      gethostname(hname, 64);
76      hname[63] = '\0';
77    #else
78      strcpy(hname, "unknown host");
79    #endif
80    
81      #ifdef PASO_MPI
82      MPI_Comm_rank(MPI_COMM_WORLD, &mpi_iam);
83      MPI_Comm_size(MPI_COMM_WORLD, &mpi_num);
84      #endif
85    
86      #pragma omp parallel
87      {
88        int omp_iam=0, omp_num=1;
89        #ifdef _OPENMP
90        omp_iam = omp_get_thread_num(); /* Call in a parallel region */
91        omp_num = omp_get_num_threads();
92        #endif
93        printf("printParallelThreadCounts: MPI=%03d/%03d OpenMP=%03d/%03d running on %s core %d\n",
94          mpi_iam, mpi_num, omp_iam, omp_num, hname, get_core_id());
95      }
96    }
97    
98  void setNumberOfThreads(const int num_threads)  void setNumberOfThreads(const int num_threads)
99  {  {
100    
# Line 38  int getNumberOfThreads() Line 114  int getNumberOfThreads()
114    
115  }  }
116    
117    int getMPISizeWorld() {
118      int mpi_num = 1;
119      #ifdef PASO_MPI
120      MPI_Comm_size(MPI_COMM_WORLD, &mpi_num);
121      #endif
122      return mpi_num;
123    }
124    
125    int getMPIRankWorld() {
126      int mpi_iam = 0;
127      #ifdef PASO_MPI
128      MPI_Comm_rank(MPI_COMM_WORLD, &mpi_iam);
129      #endif
130      return mpi_iam;
131    }
132    
133  }  // end of namespace  }  // end of namespace

Legend:
Removed from v.797  
changed lines
  Added in v.1811

  ViewVC Help
Powered by ViewVC 1.1.26