cudnn_frontend_Logging.h
Go to the documentation of this file.
/*
* Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
#pragma once
#include <iostream>
#include <fstream>
#include <cstring>
#include "cudnn_backend_base.h"
namespace cudnn_frontend {
inline bool &
isLoggingEnabled() {
static bool log_enabled = std::getenv("CUDNN_FRONTEND_LOG_INFO") && std::strncmp(std::getenv("CUDNN_FRONTEND_LOG_INFO"), "0",1);
return log_enabled;
}
inline std::ostream &
getStream() {
static std::ofstream outFile;
static std::ostream & stream = std::getenv("CUDNN_FRONTEND_LOG_FILE")
? (std::strncmp(std::getenv("CUDNN_FRONTEND_LOG_FILE"), "stdout", 6) == 0
? std::cout : (std::strncmp(std::getenv("CUDNN_FRONTEND_LOG_FILE"), "stderr", 6) == 0
? std::cerr : (outFile.open(std::getenv("CUDNN_FRONTEND_LOG_FILE"), std::ios::out), outFile)))
: (isLoggingEnabled() = false, std::cout);
return stream;
}
class ConditionalStreamer {
private:
std::ostream &stream;
public:
ConditionalStreamer(std::ostream &stream_) : stream(stream_){}
template <typename T>
const ConditionalStreamer &
operator<< (const T &t) const {
if (isLoggingEnabled()) {stream << t;}
return *this;
}
const ConditionalStreamer &
operator<< (std::ostream &(*spl)(std::ostream &)) const {
if (isLoggingEnabled()) {stream << spl;}
return *this;
}
};
inline ConditionalStreamer &
getLogger() {
static ConditionalStreamer opt(getStream());
return opt;
}
static
std::ostream &
operator << (std::ostream &os, const BackendDescriptor & desc) {
if (isLoggingEnabled()) {os << desc.describe();}
return os;
}
}
cudnn_frontend::getLogger
ConditionalStreamer & getLogger()
Definition: cudnn_frontend_Logging.h:72
cudnn_frontend::getStream
std::ostream & getStream()
Definition: cudnn_frontend_Logging.h:39
cudnn_frontend::ConditionalStreamer
Definition: cudnn_frontend_Logging.h:50
cudnn_frontend::BackendDescriptor
Definition: cudnn_backend_base.h:99
cudnn_frontend::BackendDescriptor::describe
virtual std::string describe() const =0
Return a string describing the backend Descriptor.
cudnn_frontend::isLoggingEnabled
bool & isLoggingEnabled()
Definition: cudnn_frontend_Logging.h:32
cudnn_frontend::ConditionalStreamer::ConditionalStreamer
ConditionalStreamer(std::ostream &stream_)
Definition: cudnn_frontend_Logging.h:54
cudnn_frontend
Definition: cudnn_backend_base.h:29
cudnn_frontend::ConditionalStreamer::operator<<
const ConditionalStreamer & operator<<(const T &t) const
Definition: cudnn_frontend_Logging.h:58
cudnn_backend_base.h
cudnn_frontend::ConditionalStreamer::stream
std::ostream & stream
Definition: cudnn_frontend_Logging.h:52