QUDA  0.9.0
util_quda.cpp
Go to the documentation of this file.
1 #include <cstdlib>
2 #include <cstdio>
3 #include <cstring>
4 #include <stack>
5 #include <sys/time.h>
6 
7 #include <enum_quda.h>
8 #include <util_quda.h>
9 #include <sstream>
10 
11 static const size_t MAX_PREFIX_SIZE = 100;
12 
14 static char prefix_[MAX_PREFIX_SIZE] = "";
15 static FILE *outfile_ = stdout;
16 
17 static const int MAX_BUFFER_SIZE = 1000;
18 static char buffer_[MAX_BUFFER_SIZE] = "";
19 
21 char *getOutputPrefix() { return prefix_; }
22 FILE *getOutputFile() { return outfile_; }
23 
25 {
27 }
28 
30  static bool init = false;
31  static bool rank_verbosity = false;
32  static char *rank_verbosity_env = getenv("QUDA_RANK_VERBOSITY");
33 
34  if (!init && rank_verbosity_env) { // set the policies to tune for explicitly
35  std::stringstream rank_list(rank_verbosity_env);
36 
37  int rank_;
38  while (rank_list >> rank_) {
39  if (comm_rank() == rank_ || rank_ == -1) rank_verbosity = true;
40  if (rank_list.peek() == ',') rank_list.ignore();
41  }
42  } else if (!init) {
43  rank_verbosity = comm_rank() == 0 ? true : false; // default is process 0 only
44  }
45  init = true;
46 
47  return rank_verbosity;
48 }
49 
50 // default has autotuning enabled but can be overridden with the QUDA_ENABLE_TUNING environment variable
52  static bool init = false;
53  static QudaTune tune = QUDA_TUNE_YES;
54 
55  if (!init) {
56  char *enable_tuning = getenv("QUDA_ENABLE_TUNING");
57  if (!enable_tuning || strcmp(enable_tuning,"0")!=0) {
59  } else {
61  }
62  init = true;
63  }
64 
65  return tune;
66 }
67 
68 void setOutputPrefix(const char *prefix)
69 {
71  prefix_[MAX_PREFIX_SIZE-1] = '\0';
72 }
73 
74 void setOutputFile(FILE *outfile)
75 {
76  outfile_ = outfile;
77 }
78 
79 
80 static std::stack<QudaVerbosity> vstack;
81 
83 {
84  vstack.push(getVerbosity());
86 
87  if (vstack.size() > 10) {
88  warningQuda("Verbosity stack contains %u elements. Is there a missing popVerbosity() somewhere?",
89  static_cast<unsigned int>(vstack.size()));
90  }
91 }
92 
94 {
95  if (vstack.empty()) {
96  errorQuda("popVerbosity() called with empty stack");
97  }
98  setVerbosity(vstack.top());
99  vstack.pop();
100 }
101 
102 char *getPrintBuffer() { return buffer_; }
int comm_rank(void)
Definition: comm_mpi.cpp:120
void setOutputFile(FILE *outfile)
Definition: util_quda.cpp:74
QudaVerbosity verbosity
QudaTune getTuning()
Query whether autotuning is enabled or not. Default is enabled but can be overridden by setting QUDA_...
Definition: util_quda.cpp:51
#define errorQuda(...)
Definition: util_quda.h:90
void init()
Definition: blas_quda.cu:64
void pushVerbosity(QudaVerbosity verbosity)
Definition: util_quda.cpp:82
FILE * getOutputFile()
Definition: util_quda.cpp:22
static FILE * outfile_
Definition: util_quda.cpp:15
void setOutputPrefix(const char *prefix)
Definition: util_quda.cpp:68
int strcmp(const char *__s1, const char *__s2)
bool tune
static char prefix_[MAX_PREFIX_SIZE]
Definition: util_quda.cpp:14
static std::stack< QudaVerbosity > vstack
Definition: util_quda.cpp:80
#define warningQuda(...)
Definition: util_quda.h:101
static const int MAX_BUFFER_SIZE
Definition: util_quda.cpp:17
void popVerbosity()
Definition: util_quda.cpp:93
char * strncpy(char *__dst, const char *__src, size_t __n)
char * getOutputPrefix()
Definition: util_quda.cpp:21
void setVerbosity(QudaVerbosity verbosity)
Definition: util_quda.cpp:24
static QudaVerbosity verbosity_
Definition: util_quda.cpp:13
enum QudaTune_s QudaTune
QudaVerbosity getVerbosity()
Definition: util_quda.cpp:20
char * getPrintBuffer()
Definition: util_quda.cpp:102
enum QudaVerbosity_s QudaVerbosity
static char buffer_[MAX_BUFFER_SIZE]
Definition: util_quda.cpp:18
bool getRankVerbosity()
This function returns true if the calling rank is enabled for verbosity (e.g., whether printQuda and ...
Definition: util_quda.cpp:29
char * getenv(const char *)
static const size_t MAX_PREFIX_SIZE
Definition: util_quda.cpp:11