/[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 474 by jgs, Mon Jan 30 04:23:44 2006 UTC revision 1805 by ksteube, Wed Sep 24 23:39:00 2008 UTC
# Line 1  Line 1 
1  /*  
2   ******************************************************************************  /* $Id$ */
3   *                                                                            *  
4   *       COPYRIGHT  ACcESS 2004 -  All Rights Reserved                        *  /*******************************************************
5   *                                                                            *   *
6   * This software is the property of ACcESS. No part of this code              *   *           Copyright 2003-2007 by ACceSS MNRF
7   * may be copied in any form or by any means without the expressed written    *   *       Copyright 2007 by University of Queensland
8   * consent of ACcESS.  Copying, use or modification of this software          *   *
9   * by any unauthorised person is illegal unless that person has a software    *   *                http://esscc.uq.edu.au
10   * license agreement with ACcESS.                                             *   *        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 "Utils.h"  #include "Utils.h"
17    #include "DataVector.h"
18    
19    #ifdef _OPENMP
20    #include <omp.h>
21    #endif
22    
23    #ifdef PASO_MPI
24    #include <mpi.h>
25    #endif
26    
27    #ifdef  _WIN32
28    #include <WinSock2.h>
29    #endif
30    
31  namespace escript {  namespace escript {
32    
33    int getSvnVersion()
34    {
35    #ifdef SVN_VERSION
36      return SVN_VERSION;
37    #else
38      return 0;
39    #endif
40    }
41    
42    /* This is probably not very robust, but it works on Savanna today and is useful for performance analysis */
43    int get_core_id() {
44      int processor_num=-1;
45    #ifdef CORE_ID1
46      FILE *fp;
47      int i, count_spaces=0;
48      char fname[100];
49      char buf[1000];
50    
51      sprintf(fname, "/proc/%d/stat", getpid());
52      fp = fopen(fname, "r");
53      if (fp == NULL) return(-1);
54      fgets(buf, 1000, fp);
55      fclose(fp);
56    
57      for (i=strlen(buf)-1; i>=0; i--) {
58        if (buf[i] == ' ') count_spaces++;
59        if (count_spaces == 4) break;
60      }
61      processor_num = atoi(&buf[i+1]);
62    #endif
63      return(processor_num);
64    }
65    
66    
67    void printParallelThreadCnt()
68    {
69      int mpi_iam=0, mpi_num=1;
70      char hname[64];
71    
72    #ifdef HAVE_GETHOSTNAME
73      gethostname(hname, 64);
74    #else
75      strcpy(hname, "unknown host");
76    #endif
77    
78      #ifdef PASO_MPI
79      MPI_Comm_rank(MPI_COMM_WORLD, &mpi_iam);
80      MPI_Comm_size(MPI_COMM_WORLD, &mpi_num);
81      #endif
82    
83      #pragma omp parallel
84      {
85        int omp_iam=0, omp_num=1;
86        #ifdef _OPENMP
87        omp_iam = omp_get_thread_num(); /* Call in a parallel region */
88        omp_num = omp_get_num_threads();
89        #endif
90        printf("printParallelThreadCounts: MPI=%03d/%03d OpenMP=%03d/%03d running on %s core %d\n",
91          mpi_iam, mpi_num, omp_iam, omp_num, hname, get_core_id());
92      }
93    }
94    
95  void setNumberOfThreads(const int num_threads)  void setNumberOfThreads(const int num_threads)
96  {  {
97    
# Line 35  int getNumberOfThreads() Line 111  int getNumberOfThreads()
111    
112  }  }
113    
114    int getMPISizeWorld() {
115      int mpi_num = 1;
116      #ifdef PASO_MPI
117      MPI_Comm_size(MPI_COMM_WORLD, &mpi_num);
118      #endif
119      return mpi_num;
120    }
121    
122    int getMPIRankWorld() {
123      int mpi_iam = 0;
124      #ifdef PASO_MPI
125      MPI_Comm_rank(MPI_COMM_WORLD, &mpi_iam);
126      #endif
127      return mpi_iam;
128    }
129    
130  }  // end of namespace  }  // end of namespace

Legend:
Removed from v.474  
changed lines
  Added in v.1805

  ViewVC Help
Powered by ViewVC 1.1.26