68 #define zeroThread (threadIdx.x + blockDim.x*blockIdx.x==0 && \ 69 threadIdx.y + blockDim.y*blockIdx.y==0 && \ 70 threadIdx.z + blockDim.z*blockIdx.z==0) 72 #define printfZero(...) do { \ 73 if (zeroThread) printf(__VA_ARGS__); \ 79 #define printfQuda(...) do { \ 80 sprintf(getPrintBuffer(), __VA_ARGS__); \ 81 if (getRankVerbosity()) { \ 82 fprintf(getOutputFile(), "%s", getOutputPrefix()); \ 83 fprintf(getOutputFile(), "%s", getPrintBuffer()); \ 84 fflush(getOutputFile()); \ 88 #define errorQuda(...) do { \ 89 fprintf(getOutputFile(), "%sERROR: ", getOutputPrefix()); \ 90 fprintf(getOutputFile(), __VA_ARGS__); \ 91 fprintf(getOutputFile(), " (rank %d, host %s, " __FILE__ ":%d in %s())\n", \ 92 comm_rank(), comm_hostname(), __LINE__, __func__); \ 93 fprintf(getOutputFile(), "%s last kernel called was (name=%s,volume=%s,aux=%s)\n", \ 94 getOutputPrefix(), getLastTuneKey().name, \ 95 getLastTuneKey().volume, getLastTuneKey().aux); \ 96 fflush(getOutputFile()); \ 97 quda::saveTuneCache(true); \ 101 #define warningQuda(...) do { \ 102 if (getVerbosity() > QUDA_SILENT) { \ 103 sprintf(getPrintBuffer(), __VA_ARGS__); \ 104 if (getRankVerbosity()) { \ 105 fprintf(getOutputFile(), "%sWARNING: ", getOutputPrefix()); \ 106 fprintf(getOutputFile(), "%s", getPrintBuffer()); \ 107 fprintf(getOutputFile(), "\n"); \ 108 fflush(getOutputFile()); \ 115 #define printfQuda(...) do { \ 116 fprintf(getOutputFile(), "%s", getOutputPrefix()); \ 117 fprintf(getOutputFile(), __VA_ARGS__); \ 118 fflush(getOutputFile()); \ 121 #define errorQuda(...) do { \ 122 fprintf(getOutputFile(), "%sERROR: ", getOutputPrefix()); \ 123 fprintf(getOutputFile(), __VA_ARGS__); \ 124 fprintf(getOutputFile(), " (" __FILE__ ":%d in %s())\n", \ 125 __LINE__, __func__); \ 126 fprintf(getOutputFile(), "%s last kernel called was (name=%s,volume=%s,aux=%s)\n", \ 127 getOutputPrefix(), getLastTuneKey().name, \ 128 getLastTuneKey().volume, getLastTuneKey().aux); \ 129 quda::saveTuneCache(true); \ 133 #define warningQuda(...) do { \ 134 if (getVerbosity() > QUDA_SILENT) { \ 135 fprintf(getOutputFile(), "%sWARNING: ", getOutputPrefix()); \ 136 fprintf(getOutputFile(), __VA_ARGS__); \ 137 fprintf(getOutputFile(), "\n"); \ 138 fflush(getOutputFile()); \ 145 #define checkCudaErrorNoSync() do { \ 146 cudaError_t error = cudaGetLastError(); \ 147 if (error != cudaSuccess) \ 148 errorQuda("(CUDA) %s", cudaGetErrorString(error)); \ 154 #define checkCudaError() do { \ 155 cudaDeviceSynchronize(); \ 156 checkCudaErrorNoSync(); \ 161 #define checkCudaError() checkCudaErrorNoSync() 166 #endif // _UTIL_QUDA_H QudaVerbosity getVerbosity()
void setOutputPrefix(const char *prefix)
void saveTuneCache(bool error=false)
void pushOutputPrefix(const char *prefix)
Push a new output prefix onto the stack.
void popOutputPrefix()
Pop the output prefix restoring the prior one on the stack.
char * getOmpThreadStr()
Returns a string of the form ",omp_threads=$OMP_NUM_THREADS", which can be used for storing the numbe...
void pushVerbosity(QudaVerbosity verbosity)
Push a new verbosity onto the stack.
bool getRankVerbosity()
This function returns true if the calling rank is enabled for verbosity (e.g., whether printQuda and ...
void popVerbosity()
Pop the verbosity restoring the prior one on the stack.
enum QudaVerbosity_s QudaVerbosity
void setOutputFile(FILE *outfile)
QudaTune getTuning()
Query whether autotuning is enabled or not. Default is enabled but can be overridden by setting QUDA_...
void setVerbosity(QudaVerbosity verbosity)