libadc-cxx
1.0.0
Structured logging for scientific computing
Loading...
Searching...
No Matches
adc
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)
10
The ADC project aims to provide workflow metadata collection for all scientific computing environments and workflow stages.
11
Here '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
16
These *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
.
21
The 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)
29
ADC produces *semi-structured*, extensible json messages. Some json objects have standardized names and contents; these
30
are included in a message if a convenience function is called to add them to the message. If specific
31
names are present, the associated values have standard origins.
32
Other objects have minimally defined fields, with the rest of the fields being up to the application.
33
Where common json libraries exist, the application may also attach arbitrary json objects to a message; this support
34
varies by implementation language. The \ref adc::builder_api provides a rich set of convenience functions for constructing
35
and customizing ADC messages that capture scientific programming data types.
36
37
\section environments Environments (where)
38
Scientific workflows span desktop, server, and cluster environments. Critical information
39
is usually added (or first exposed) at each stage. Linux environments are directly supported
40
as well as Windows environments connected through Java.
41
42
\section bindings Languages (how)
43
Initially, C++, Python, Java are supported, and likely this will expand to C, Fortran and JavaScript.
44
Documented here is the C++17 standard library-based binding that has optional support for MPI.
45
This binding follows the Factory pattern (\ref adc::factory). The factory provides json builder objects and publisher objects.
46
47
A 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
54
The data collected is published as the application runs, and is fully labeled with
55
data types for downstream interpretation up to decades into the future.
56
57
A variety of plugins implement the \ref adc::publisher_api
58
to ensure transmission performance and overhead demands are met
59
for 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:
63
APIs:
64
- \ref adc::factory
65
- \ref adc::builder_api
66
- \ref adc::publisher_api
67
68
Examples:
69
- \ref mpiSimpleDemo.cpp demonstrates instrumenting a trivial MPI program.
70
71
*/
72
/**
73
\defgroup API Factory and interfaces for application use
74
*/
75
namespace
adc
{
76
77
}
// namespace adc
78
#endif
// adc_hpp
factory.hpp
adc
Definition
adc.hpp:75
Generated by
1.9.8