libadc-cxx 1.0.0
Structured logging for scientific computing
Loading...
Searching...
No Matches
adc.hpp
Go to the documentation of this file.
1#ifndef adc_hpp
2#define adc_hpp
3#include "adc/adc_config.h"
4#include "adc/factory.hpp"
5
6/** \brief Application Data Collection: Structured logging for scientific computing.
7\mainpage Application Data Collection (C++)
8
9\section purpose Purpose (why)
10The ADC project aims to provide workflow metadata collection for all scientific computing environments and workflow stages.
11Here 'metadata' means small, structured descriptions of:
12 - what is planned (such as a campaign of multiple jobs, or in a single job being submitted)
13 - what is happening (such as the data sizes and features in an individual execution or rank of a parallel execution)
14 - what has happened (such as scalar progress indicators or final results)
15
16These *complement* large data flows such as:
17 - time-series hardware metrics (papi, LDMS)
18 - call-profiling data (caliper, kokkos, gprof, ...)
19 - lists of particle or geometric entities and associated engineering or physics data (hdf5, netcdf, exodus, commercial CAD formats)
20 .
21The metadata logged is intended for analysis during or after the current workflow step to allow:
22 - other tooling to influence subsequent steps, such as compute resource selection.
23 - users to track workflow progress.
24 - performance analysts to correlate and predict performance based on simulation metadata.
25 - software developers and managers to prioritize feature work based on usage.
26 - software agents to detect when system performance is below expectations.
27
28\section data Output (what)
29ADC produces *semi-structured*, extensible json messages. Some json objects have standardized names and contents; these
30are included in a message if a convenience function is called to add them to the message. If specific
31names are present, the associated values have standard origins.
32Other objects have minimally defined fields, with the rest of the fields being up to the application.
33Where common json libraries exist, the application may also attach arbitrary json objects to a message; this support
34varies by implementation language. The \ref adc::builder_api provides a rich set of convenience functions for constructing
35and customizing ADC messages that capture scientific programming data types.
36
37\section environments Environments (where)
38Scientific workflows span desktop, server, and cluster environments. Critical information
39is usually added (or first exposed) at each stage. Linux environments are directly supported
40as well as Windows environments connected through Java.
41
42\section bindings Languages (how)
43Initially, C++, Python, Java are supported, and likely this will expand to C, Fortran and JavaScript.
44Documented here is the C++17 standard library-based binding that has optional support for MPI.
45This binding follows the Factory pattern (\ref adc::factory). The factory provides json builder objects and publisher objects.
46
47A header-only binding (which, however, adds a boost dependency to the application build) is also in development.
48
49\section library Linking
50- Linking with -ladc-c++ provides a factory-based API without MPI dependencies.
51- Linking with -ladc-c++-mpi provides a factory-based API with MPI library dependencies.
52
53\section publishers Performance
54The data collected is published as the application runs, and is fully labeled with
55data types for downstream interpretation up to decades into the future.
56
57A variety of plugins implement the \ref adc::publisher_api
58to ensure transmission performance and overhead demands are met
59for each scientific environment. Messages can be sent directly to the REST-based infrastructure, or
60(in HPC scenarios) routed through any bus which can support json (such as LDMS or a cache file).
61
62\section apilist Just show me the code:
63APIs:
64- \ref adc::factory
65- \ref adc::builder_api
66- \ref adc::publisher_api
67
68Examples:
69- \ref mpiSimpleDemo.cpp demonstrates instrumenting a trivial MPI program.
70
71 */
72/**
73\defgroup API Factory and interfaces for application use
74*/
75namespace adc {
76
77} // namespace adc
78#endif // adc_hpp
Definition adc.hpp:75