/[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 1312 by ksteube, Mon Sep 24 06:18:44 2007 UTC revision 1806 by ksteube, Thu Sep 25 00:36:10 2008 UTC
# Line 13  Line 13 
13   *   *
14   *******************************************************/   *******************************************************/
15    
16    #include <unistd.h>
17    #include <string.h>
18    
19  #include "Utils.h"  #include "Utils.h"
20  #include "DataVector.h"  #include "DataVector.h"
21    
# Line 20  Line 23 
23  #include <omp.h>  #include <omp.h>
24  #endif  #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 {  namespace escript {
35    
36  int getSvnVersion()  int getSvnVersion()
# Line 31  int getSvnVersion() Line 42  int getSvnVersion()
42  #endif  #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)  void setNumberOfThreads(const int num_threads)
100  {  {
101    
# Line 50  int getNumberOfThreads() Line 115  int getNumberOfThreads()
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  }  // end of namespace

Legend:
Removed from v.1312  
changed lines
  Added in v.1806

  ViewVC Help
Powered by ViewVC 1.1.26