/[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 1561 by ksteube, Wed May 21 06:58:52 2008 UTC revision 1811 by ksteube, Thu Sep 25 23:11:13 2008 UTC
# Line 1  Line 1 
1    
 /* $Id$ */  
   
2  /*******************************************************  /*******************************************************
3   *  *
4   *           Copyright 2003-2007 by ACceSS MNRF  * Copyright (c) 2003-2008 by University of Queensland
5   *       Copyright 2007 by University of Queensland  * Earth Systems Science Computational Center (ESSCC)
6   *  * http://www.uq.edu.au/esscc
7   *                http://esscc.uq.edu.au  *
8   *        Primary Business: Queensland, Australia  * Primary Business: Queensland, Australia
9   *  Licensed under the Open Software License version 3.0  * Licensed under the Open Software License version 3.0
10   *     http://www.opensource.org/licenses/osl-3.0.php  * 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 24  Line 26 
26  #include <mpi.h>  #include <mpi.h>
27  #endif  #endif
28    
29    #ifdef  _WIN32
30    #include <WinSock2.h>
31    #endif
32    
33  namespace escript {  namespace escript {
34    
35  int getSvnVersion()  int getSvnVersion()
# Line 35  int getSvnVersion() Line 41  int getSvnVersion()
41  #endif  #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()  void printParallelThreadCnt()
70  {  {
71    int mpi_iam=0, mpi_num=1;    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    #ifdef PASO_MPI
82    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_iam);    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_iam);
83    MPI_Comm_size(MPI_COMM_WORLD, &mpi_num);    MPI_Comm_size(MPI_COMM_WORLD, &mpi_num);
84    #endif    #endif
85    
   #ifdef _OPENMP  
86    #pragma omp parallel    #pragma omp parallel
   #endif  
87    {    {
88      int omp_iam=0, omp_num=1;      int omp_iam=0, omp_num=1;
89      #ifdef _OPENMP      #ifdef _OPENMP
90      omp_iam = omp_get_thread_num(); /* Call in a parallel region */      omp_iam = omp_get_thread_num(); /* Call in a parallel region */
91      omp_num = omp_get_num_threads();      omp_num = omp_get_num_threads();
92      #endif      #endif
93      printf("printParallelThreadCounts: OpenMP=%d/%d MPI=%d/%d\n", omp_iam, omp_num, mpi_iam, mpi_num);      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    
# Line 76  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.1561  
changed lines
  Added in v.1811

  ViewVC Help
Powered by ViewVC 1.1.26