12#ifndef SST_CORE_OUTPUT_H 
   13#define SST_CORE_OUTPUT_H 
   15#include "sst/core/serialization/serializer_fwd.h" 
   25#ifndef __STDC_FORMAT_MACROS 
   26#define __STDC_FORMAT_MACROS 
   33#include <unordered_map> 
   35extern int main(
int argc, 
char** argv);
 
   40#define CALL_INFO __LINE__, __FILE__, __FUNCTION__ 
   42#if defined(__GNUC__) || defined(__clang__) 
   43#define CALL_INFO_LONG __LINE__, __FILE__, __PRETTY_FUNCTION__ 
   45#define CALL_INFO_LONG __LINE__, __FILE__, __FUNCTION__ 
   65    static constexpr uint32_t PrintAll = std::numeric_limits<uint32_t>::max();
 
  115        const std::string& localoutputfilename = 
"");
 
  174    void init(
const std::string& prefix, uint32_t verbose_level, uint32_t verbose_mask, 
output_location_t location,
 
  175        const std::string& localoutputfilename = 
"");
 
  185    void output(uint32_t line, 
const char* file, 
const char* func, 
const char* format, ...) const
 
  186        __attribute__((format(printf, 5, 6)))
 
  189        if ( 
true == m_objInitialized && 
NONE != m_targetLoc ) {
 
  191            va_start(arg, format);
 
  192            outputprintf(line, file, func, format, arg);
 
 
  201    void output(
const char* format, ...) const __attribute__((format(printf, 2, 3)))
 
  204        if ( 
true == m_objInitialized && 
NONE != m_targetLoc ) {
 
  206            va_start(arg, format);
 
  207            outputprintf(format, arg);
 
 
  228    void verbose(uint32_t line, 
const char* file, 
const char* func, uint32_t output_level, uint32_t output_bits,
 
  229        const char* format, ...) const __attribute__((format(printf, 7, 8)))
 
  233        if ( 
true == m_objInitialized && 
NONE != m_targetLoc ) {
 
  236            if ( ((output_bits & ~m_verboseMask) == 0) && (output_level <= m_verboseLevel) ) {
 
  238                va_start(arg, format);
 
  239                outputprintf(line, file, func, format, arg);
 
 
  262    void verbosePrefix(
const char* tempPrefix, uint32_t line, 
const char* file, 
const char* func, uint32_t output_level,
 
  263        uint32_t output_bits, 
const char* format, ...) __attribute__((format(printf, 8, 9)))
 
  268        if ( 
true == m_objInitialized && 
NONE != m_targetLoc ) {
 
  269            const std::string normalPrefix = m_outputPrefix;
 
  270            m_outputPrefix                 = tempPrefix;
 
  274            if ( ((output_bits & ~m_verboseMask) == 0) && (output_level <= m_verboseLevel) ) {
 
  276                va_start(arg, format);
 
  277                outputprintf(line, file, func, format, arg);
 
  281            m_outputPrefix = normalPrefix;
 
 
  302    void debugPrefix(
const char* tempPrefix, uint32_t line, 
const char* file, 
const char* func, uint32_t output_level,
 
  303        uint32_t output_bits, 
const char* format, ...) __attribute__((format(printf, 8, 9)))
 
  306#ifdef __SST_DEBUG_OUTPUT__ 
  309        if ( 
true == m_objInitialized && 
NONE != m_targetLoc ) {
 
  310            const std::string normalPrefix = m_outputPrefix;
 
  311            m_outputPrefix                 = tempPrefix;
 
  315            if ( ((output_bits & ~m_verboseMask) == 0) && (output_level <= m_verboseLevel) ) {
 
  317                va_start(arg, format);
 
  318                outputprintf(line, file, func, format, arg);
 
  322            m_outputPrefix = normalPrefix;
 
 
  355    void debug(uint32_t line, 
const char* file, 
const char* func, uint32_t output_level, uint32_t output_bits,
 
  356        const char* format, ...) const __attribute__((format(printf, 7, 8)))
 
  358#ifdef __SST_DEBUG_OUTPUT__ 
  360        if ( 
true == m_objInitialized && 
NONE != m_targetLoc ) {
 
  363            if ( ((output_bits & ~m_verboseMask) == 0) && (output_level <= m_verboseLevel) ) {
 
  365                va_start(arg, format);
 
  366                outputprintf(line, file, func, format, arg);
 
 
  395    void fatal(uint32_t line, 
const char* file, 
const char* func, 
int exit_code, 
const char* format, ...) const
 
  396        __attribute__((format(printf, 6, 7)));
 
  426    void setPrefix(const std::
string& prefix);
 
  468    inline 
void flush()
 const { std::fflush(*m_targetOutputRef); }
 
  474    static void setFileName(
const std::string& filename);
 
  476    static Output& getDefaultObject() { 
return m_defaultObject; }
 
  481    friend class TraceFunction;
 
  484    void        openSSTTargetFile() 
const;
 
  485    void        closeSSTTargetFile();
 
  487    int         getMPIWorldRank() 
const;
 
  488    int         getMPIWorldSize() 
const;
 
  489    uint32_t    getNumThreads() 
const;
 
  490    uint32_t    getThreadRank() 
const;
 
  491    std::string buildPrefixString(uint32_t line, 
const std::string& file, 
const std::string& func) 
const;
 
  493    void outputprintf(uint32_t line, 
const std::string& file, 
const std::string& func, 
const char* format,
 
  494        va_list arg) 
const __attribute__((format(printf, 5, 0)));
 
  496    void outputprintf(
const char* format, va_list arg) 
const __attribute__((format(printf, 2, 0)));
 
  499    void outputprintf(uint32_t line, 
const std::string& file, 
const std::string& func, 
const char* format, ...) const
 
  500        __attribute__((format(printf, 5, 6)))
 
  503        va_start(args, format);
 
  504        outputprintf(line, file, func, format, args);
 
  508    void outputprintf(
const char* format, ...) const __attribute__((format(printf, 2, 3)))
 
  511        va_start(args, format);
 
  512        outputprintf(format, args);
 
  516    friend int ::main(
int argc, 
char** argv);
 
  517    static Output& setDefaultObject(
const std::string& prefix, uint32_t verbose_level, uint32_t verbose_mask,
 
  520        m_defaultObject.init(prefix, verbose_level, verbose_mask, location, localoutputfilename);
 
  521        return getDefaultObject();
 
  524    static void setWorldSize(
int num_ranks, 
int num_threads, 
int mpiRank)
 
  526        m_worldSize_ranks   = num_ranks;
 
  527        m_worldSize_threads = num_threads;
 
  531    static void setThreadID(std::thread::id mach, uint32_t user) { m_threadMap.insert(std::make_pair(mach, user)); }
 
  534    bool              m_objInitialized;
 
  535    std::string       m_outputPrefix;
 
  536    uint32_t          m_verboseLevel;
 
  537    uint32_t          m_verboseMask;
 
  540    static Output m_defaultObject;
 
  549    std::FILE** m_targetOutputRef;
 
  554    std::FILE**  m_targetFileHandleRef;
 
  555    std::string* m_targetFileNameRef;
 
  556    uint32_t*    m_targetFileAccessCountRef;
 
  559    static std::string m_sstGlobalSimFileName;
 
  560    static std::FILE*  m_sstGlobalSimFileHandle;
 
  561    static uint32_t    m_sstGlobalSimFileAccessCount;
 
  564    std::string m_sstLocalFileName;
 
  565    std::FILE*  m_sstLocalFileHandle;
 
  566    uint32_t    m_sstLocalFileAccessCount;
 
  568    static std::unordered_map<std::thread::id, uint32_t> m_threadMap;
 
  569    static int                                           m_worldSize_ranks;
 
  570    static int                                           m_worldSize_threads;
 
  572    static int                                           m_mpiRank;
 
 
  601    thread_local static int               trace_level;
 
  602    thread_local static std::vector<char> indent_array;
 
  605    TraceFunction(uint32_t line, 
const char* file, 
const char* func, 
bool print_sim_info = 
true, 
bool activate = 
true);
 
  612    void output(
const char* format, ...) 
const __attribute__((format(printf, 2, 3)));
 
  618    std::string function_;
 
  623    static bool global_active_;
 
  624    static char indent_marker_;
 
 
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition serializer.h:45
Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file.
Definition output.h:54
uint32_t getVerboseLevel() const
Returns object verbose level.
Definition output.cc:107
std::string getPrefix() const
Returns object prefix.
Definition output.cc:131
void output(uint32_t line, const char *file, const char *func, const char *format,...) const
Output the message with formatting as specified by the format parameter.
Definition output.h:185
Output()
Default Constructor.
Definition output.cc:58
void verbose(uint32_t line, const char *file, const char *func, uint32_t output_level, uint32_t output_bits, const char *format,...) const
Output the verbose message with formatting as specified by the format parameter.
Definition output.h:228
void output(const char *format,...) const
Output the message with formatting as specified by the format parameter.
Definition output.h:201
void debug(uint32_t line, const char *file, const char *func, uint32_t output_level, uint32_t output_bits, const char *format,...) const
Output the debug message with formatting as specified by the format parameter.
Definition output.h:355
void setOutputLocation(output_location_t location)
Sets object output location.
Definition output.cc:137
void fatal(uint32_t line, const char *file, const char *func, int exit_code, const char *format,...) const
Output the fatal message with formatting as specified by the format parameter.
Definition output.cc:154
output_location_t
Choice of output location.
Definition output.h:58
@ NONE
Definition output.h:59
@ STDERR
Definition output.h:61
@ STDOUT
Definition output.h:60
@ FILE
Definition output.h:62
void verbosePrefix(const char *tempPrefix, uint32_t line, const char *file, const char *func, uint32_t output_level, uint32_t output_bits, const char *format,...)
Output the verbose message with formatting as specified by the format parameter.
Definition output.h:262
output_location_t getOutputLocation() const
Returns object output location.
Definition output.cc:147
void setVerboseLevel(uint32_t verbose_level)
Sets object verbose level.
Definition output.cc:101
void setPrefix(const std::string &prefix)
Sets object prefix.
Definition output.cc:125
void setVerboseMask(uint32_t verbose_mask)
Sets object verbose mask.
Definition output.cc:113
static void setFileName(const std::string &filename)
This method sets the static filename used by SST.
Definition output.cc:215
void flush() const
This method allows for the manual flushing of the output.
Definition output.h:468
void init(const std::string &prefix, uint32_t verbose_level, uint32_t verbose_mask, output_location_t location, const std::string &localoutputfilename="")
Initialize the object after construction.
Definition output.cc:71
void debugPrefix(const char *tempPrefix, uint32_t line, const char *file, const char *func, uint32_t output_level, uint32_t output_bits, const char *format,...)
Output the debug message with formatting as specified by the format parameter.
Definition output.h:302
Output(const std::string &prefix, uint32_t verbose_level, uint32_t verbose_mask, output_location_t location, const std::string &localoutputfilename="")
Constructor.
Definition output.cc:50
uint32_t getVerboseMask() const
Returns object verbose mask.
Definition output.cc:119
void output(const char *format,...) const
Output the message with formatting as specified by the format parameter.
Definition output.cc:572